segue.identifier =第二个视图中的nil

时间:2015-04-25 15:00:49

标签: ios swift segue

我有IOS Swift程序,使用带有NavigationController的Storyboard。 有两个视图,我们称之为mainView,secondView。

从mainView我有BarButtonItem转到secondView。当按下该按钮时,它会在mainView中使用segue.identifier =" secondView"

触发prepareForSegue函数

当我打开时,例如第二个视图,我有两个取消和保存的BarButtonItems。当按下其中任何一个时,触发该视图中的prepareForSegue函数,但现在segue.identifier = nil。

我原本希望有segue.identifier ="取消"或者"保存"取决于该视图中按下的按钮。

我是否误解了segue功能?任何人都可以尝试为此加油,因为这看起来像是故事板和导航中非常重要和有用的部分 - 但不知怎的,我没有把它弄好。

2 个答案:

答案 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以使这一切成为现实。

将这些放在一起,然后简而言之:

  1. 我在第二个视图(课程上方)中创建了一个协议

     TimeZone timeZone = cal.getTimeZone();
     timeZone.getOffset( System.currentTimeMillis())); 
    
  2. 然后我在第二个视图中创建了一个委托变量

    protocol MyDelegate: class {
        func getMyList(sender: MySecondView) -> [NSManagedObject]  //returns a CoreData list
    }
    
  3. 在我的第一个视图中,我实现了协议,这只是一个简单的函数,返回我在第二个视图中需要的列表

  4. 在我的第一个视图中,我有prepareForSegue,我抓住了正确的segue.identifier,然后通过segue.destinationViewController设置了委托,就像这样

    weak var datasource: MyDelegate!
    
  5. 那是关于它的 - 现在神奇地说,流程是正确的,发生了分段,正确地传递了,并且一切都很好:)