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

时间:2015-08-07 12:04:38

标签: ios swift uistoryboardsegue

我非常混淆“执行segue与标识符”和“准备segue ”......这些功能的作用以及它们如何工作?

5 个答案:

答案 0 :(得分:8)

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

来自Apple Documentation

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

      

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

         

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

  • Swift2: prepareForSegue(_:sender:)

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

      

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

         

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

答案 1 :(得分:5)

performSegueWithIdentifier只是告诉viewController你喜欢segue的内容。您可以在Interface Builder中提供segue名称。

[self performSegueWithIdentifier:@"GoToAnotherViewController" sender:self];

你可能有一个带有几个segue的ViewController,或者你可能有一些来自当前ViewController的目标VC"需要知道"当你离婚时,you'd use 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];
    }
}

答案 2 :(得分:1)

正如它所说的那样,

performSegueWithIdentifier会从您当前的UIViewController过渡到与segue相关联的UIViewController

prepareForSegue 让你在过渡发生之前做一些额外的工作

答案 3 :(得分:1)

我在这里的答案中没有看到差异,可能有助于澄清。

performSegueWithIdentifier 授权您的代码,而 prepareForSegue 授权用户,需要用户操作。

假设您有一些问题测验,用户有30秒的时间来回答每个问题。

当用户点击其中一个答案时,将调用 prepareForSegue 。用户在这里负责。

另一方面,如果用户没有点击任何东西,但30秒过期,那么你的代码应该'自动执行segue'

当你需要 performSegueWithIdentifier 以编程方式完成工作时。您的代码直接在这里负责。

希望它有所帮助。

答案 4 :(得分:0)

执行segue,实际上会更改用户看到的视图。执行segue函数将在更改视图之前调用prepare segue函数;因此,通常,开发人员会在信息发生之前将信息传递给该函数中的下一个控制器。

相关问题