执行segue与标识符和准备segue之间的区别

Uza*_*air 10 ios uistoryboardsegue swift

我在" 使用标识符执行segue "和" 为segue做准备 " 之间非常混淆......这些功能的作用以及它们如何工作?

Dha*_*esh 10

prepareForSegue准备在视图控制器之间传递的数据,其中带有标识符的performSegue实际上允许切换发生.

来自Apple文档:

  • Swift2: performSegueWithIdentifier(_:sender:)
  • Swift3: performSegue(withIdentifier: String, sender: Any?)

    应用程序通常不需要以编程方式触发segues.如果需要,您可以调用此方法来触发无法在故事板文件中表达的操作的segue,例如不同故事板中场景之间的过渡.

    通常,segue由用户操作触发,例如单击按钮.在Interface Builder中,配置对象(例如嵌入在视图控制器视图层次结构中的控件)以触发segue.

  • Swift2: prepareForSegue(_:sender:)

  • Swift3: prepare(for: NSStoryboardSegue, sender: Any?)

    此方法的默认实现不执行任何操作; 您可以根据segue的上下文覆盖它以将相关数据传递给新视图控制器或窗口控制器.segue对象描述了转换,并包括对segue中涉及的两个控制器的引用.

    可以从多个源触发Segues,因此使用segue和sender参数中的信息可以消除应用中不同逻辑路径之间的歧义.例如,如果segue源自表视图,则sender参数将标识用户单击的单元格.您可以使用该信息在目标视图控制器上设置数据.


Adr*_*ian 5

performSegueWithIdentifier只是告诉viewController你想要什么segue到segue.您可以在Interface Builder中提供segue名称.

[self performSegueWithIdentifier:@"GoToAnotherViewController" sender:self];
Run Code Online (Sandbox Code Playgroud)

你可能有一个带有几个segue的ViewController,或者你可能有一些来自当前ViewController的东西,当你离开时,destinationVC"需要知道",所以你要使用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];
    }
}
Run Code Online (Sandbox Code Playgroud)