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

10
我对“perform segue with identifier”和“prepare for segue”之间感到非常困惑...这些函数是做什么的,以及它们如何工作?
6个回答

10

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参数将标识用户单击的单元格。 您可以使用该信息在目标视图控制器上设置数据。


5

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];
    }
}

我在“SecondViewController(YourViewController)”中有一个TextField,我想改变它的frame和Placeholder文本。我该怎么做?请帮忙。 - Ganesh G

4

performSegueWithIdentifier 方法会帮助你从当前的 UIViewController 到与其连接的 UIViewController 进行转移。

prepareForSegue 方法可以让你在转移发生之前进行一些额外的工作。


2
这里有一个区别,可能有助于澄清:performSegueWithIdentifier使您的代码更具权力,而prepareForSegue则赋予用户权力,需要用户采取行动。例如,假设您有一个测验,其中包含一些问题,用户有30秒钟回答每个问题。当用户点击其中一个答案时,将调用prepareForSegue。这里由用户负责。另一方面,如果用户没有点击任何东西但30秒时间到了,则您的代码应自动执行segue。在这种情况下,您需要使用performSegueWithIdentifier来编程完成任务。在这里,您的代码直接负责。希望对您有所帮助。

0

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


0

Swift 3语法是:performSegue(withIdentifier: String, sender: Any?)。如果您只想带出viewController而没有任何预先-配置条件,可以这样做。

您还可以执行prepare(for: NSStoryboardSegue, sender: Any?),它提供了额外的功能:

  • 将额外数据传递给viewController
  • 进行if else语句,以便根据需要在登录屏幕或注册屏幕之间切换

基本上:prepareForSegue准备在视图控制器之间传递数据,而performSegue实际上允许切换发生。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接