我有IOS Swift程序,使用带有NavigationController的Storyboard。 有两个视图,我们称之为mainView,secondView。
从mainView我有BarButtonItem转到secondView。当按下该按钮时,它会在mainView中使用segue.identifier =" secondView"
触发prepareForSegue函数当我打开时,例如第二个视图,我有两个取消和保存的BarButtonItems。当按下其中任何一个时,触发该视图中的prepareForSegue函数,但现在segue.identifier = nil。
我原本希望有segue.identifier ="取消"或者"保存"取决于该视图中按下的按钮。
我是否误解了segue功能?任何人都可以尝试为此加油,因为这看起来像是故事板和导航中非常重要和有用的部分 - 但不知怎的,我没有把它弄好。
答案 0 :(得分:0)
您是否为第二个视图上的取消和保存按钮创建了操作? 右键单击并从故事板拖动到视图控制器代码,然后从下拉列表中选择操作。
然后在动作方法中,执行你的segue。
答案 1 :(得分:0)
@Garret,@ rrrrmar,@ syed-tariq - 谢谢你指出我正确的方向。
事实证明,Unwind Segue让我走上正轨:Xcode Swift Go back to previous viewController (TableViewController)
但是我也在故事板中发现了一个错误,因为我在所有视图上都有导航控制器(是的,我知道 - 当你知道的更好时是愚蠢的):How do I segue values when my ViewController is embedded in an UINavigationController?
最后一个难题是了解Protocols and Deligates以使这一切成为现实。
将这些放在一起,然后简而言之:
我在第二个视图(课程上方)中创建了一个协议
TimeZone timeZone = cal.getTimeZone();
timeZone.getOffset( System.currentTimeMillis()));
然后我在第二个视图中创建了一个委托变量
protocol MyDelegate: class {
func getMyList(sender: MySecondView) -> [NSManagedObject] //returns a CoreData list
}
在我的第一个视图中,我实现了协议,这只是一个简单的函数,返回我在第二个视图中需要的列表
在我的第一个视图中,我有prepareForSegue,我抓住了正确的segue.identifier,然后通过segue.destinationViewController设置了委托,就像这样
weak var datasource: MyDelegate!
那是关于它的 - 现在神奇地说,流程是正确的,发生了分段,正确地传递了,并且一切都很好:)