prepareForSegue用于准备在视图控制器之间传递的数据,而performSegue with identifier则实际允许切换发生。
来自Apple文档:
Swift2:
performSegueWithIdentifier(_:sender:)
Swift3:
performSegue(withIdentifier: String, sender: Any?)
应用程序通常不需要以编程方式触发segues。如果需要,您可以调用此方法以触发storyboard文件中无法表示的操作的segue,例如在不同storyboard之间的场景转换。
通常,segue是通过用户操作触发的,例如单击按钮。在Interface Builder中,配置一个对象,例如嵌入在视图控制器的视图层次结构中的控件,以触发segue。
Swift2:
prepareForSegue(_:sender:)
Swift3:
prepare(for: NSStoryboardSegue, sender: Any?)
此方法的默认实现不执行任何操作; 您可以重写它以根据segue的上下文传递相关数据给新的视图控制器或窗口控制器。segue对象描述了转换并包括对segue中涉及的两个控制器的引用。
可以从多个来源触发segues,因此请使用segue和sender参数中的信息来消除应用程序中不同逻辑路径之间的歧义。
例如,如果segue源自表视图,则sender参数将标识用户单击的单元格。 您可以使用该信息在目标视图控制器上设置数据。
performSegueWithIdentifier
只是告诉视图控制器你想要使用哪个 segue。你可以在 Interface Builder 中为你的 segues 命名。
[self performSegueWithIdentifier:@"GoToAnotherViewController" sender:self];
你可能有一个包含多个segue的ViewController,或者在从当前ViewController进行segue时,目标视图控制器需要知道一些信息,这时你会使用prepareForSegue方法。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"GoToAnotherViewController"])
{
// Get reference to the destination view controller
YourViewController *vc = [segue destinationViewController];
// Pass any objects to the view controller here, like...
[vc setMyObjectHere:object];
}
}
performSegueWithIdentifier 方法会帮助你从当前的 UIViewController
到与其连接的 UIViewController
进行转移。
prepareForSegue 方法可以让你在转移发生之前进行一些额外的工作。
执行segue实际上会改变用户看到的视图。在改变视图之前,perform segue函数将调用prepare segue函数;因此,通常开发人员会在该函数中传递信息给下一个控制器,然后再进行segue。
Swift 3语法是:performSegue(withIdentifier: String, sender: Any?)
。如果您只想带出viewController而没有任何预先-配置或条件,可以这样做。
您还可以执行prepare(for: NSStoryboardSegue, sender: Any?)
,它提供了额外的功能:
基本上:prepareForSegue准备在视图控制器之间传递数据,而performSegue实际上允许切换发生。