【问题标题】:Difference between perform segue with identifier and prepare for segue使用标识符执行转场和准备转场之间的区别
【发布时间】:2015-10-30 20:58:19
【问题描述】:

我很困惑“使用标识符执行转场”和“准备转场”......这些函数的作用和工作原理是什么?

【问题讨论】:

    标签: ios swift uistoryboardsegue


    【解决方案1】:

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

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

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

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

    另一方面,如果用户在 30 秒到期后没有点击任何内容,那么您的代码应该自动执行转场

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

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      Swift 3 语法 是:performSegue(withIdentifier: String, sender: Any?)。如果您只想带上没有任何 pre-configurationconditons

      的 viewController,则可以这样做

      您也可以使用prepare(for: NSStoryboardSegue, sender: Any?) 来提供额外 功能:

      • 向 viewController 传递额外数据
      • 执行 if else 语句,以便在例如通过登录屏幕或注册屏幕

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

      【讨论】:

        【解决方案3】:

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

        来自Apple Documentation

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

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

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

        • Swift2: prepareForSegue(_:sender:)

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

          这个方法的默认实现什么都不做;你可以 覆盖它以将相关数据传递给新的视图控制器或窗口 控制器,基于 segue 的上下文。转场对象 描述转换并包括对两个控制器的引用 参与了segue。

          可以从多个来源触发 Segue,因此请使用以下信息 在 segue 和 sender 参数中区分不同的 应用程序中的逻辑路径。例如,如果 segue 源自 表格视图,发送者参数将标识用户的单元格 点击。您可以使用该信息在 目标视图控制器。

        【讨论】:

          【解决方案4】:

          performSegueWithIdentifier 只是告诉 viewController 你想要转入什么转场。您可以在 Interface Builder 中为您的 segues 命名。

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

          您可能有一个带有多个 segue 的 ViewController,或者您可能有来自当前 ViewController 的某些东西,destinationVC 在您进行 segue 时“需要知道”,所以 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];
              }
          }
          

          【讨论】:

          • 我在“SecondViewController (YourViewController)”中有一个 TextField,我想更改框架和占位符文本。我该怎么做?请帮忙。
          【解决方案5】:

          performSegueWithIdentifier 正如它所说,从您当前的 UIViewController 转换为 segue-connected UIViewController

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

          【讨论】:

            【解决方案6】:

            执行segue,实际上改变了用户看到的视图。 perform segue 函数会在改变视图之前调用 prepare segue 函数;所以,一般来说,开发人员会在函数 segue 之前将信息传递给该函数中的下一个控制器。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-11-05
              • 1970-01-01
              • 2019-11-20
              • 2019-05-30
              • 2015-03-23
              • 2013-10-13
              • 2017-03-07
              相关资源
              最近更新 更多