【发布时间】:2015-10-30 20:58:19
【问题描述】:
我很困惑“使用标识符执行转场”和“准备转场”......这些函数的作用和工作原理是什么?
【问题讨论】:
标签: ios swift uistoryboardsegue
我很困惑“使用标识符执行转场”和“准备转场”......这些函数的作用和工作原理是什么?
【问题讨论】:
标签: ios swift uistoryboardsegue
我在此处的答案中没有看到差异,可能有助于澄清。
performSegueWithIdentifier 赋予您的代码权力,而 prepareForSegue 赋予用户权力,需要用户操作。
假设您有一个包含一些问题的测验,用户有 30 秒的时间来回答每个问题。
当用户单击其中一个答案时,将调用 prepareForSegue。用户在这里负责。
另一方面,如果用户在 30 秒到期后没有点击任何内容,那么您的代码应该自动执行转场。
这时您需要 performSegueWithIdentifier 以编程方式完成工作。您的代码在这里直接负责。
希望对你有帮助。
【讨论】:
Swift 3 语法 是:performSegue(withIdentifier: String, sender: Any?)。如果您只想带上没有任何 pre-configuration 或 conditons
您也可以使用prepare(for: NSStoryboardSegue, sender: Any?) 来提供额外 功能:
基本上:prepareForSegue 准备数据以在视图控制器之间传递,而 performSegue 实际上允许切换发生
【讨论】:
prepareForSegue 准备数据以在视图控制器之间传递,其中带有标识符的 performSegue 实际上允许切换发生。
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 源自 表格视图,发送者参数将标识用户的单元格 点击。您可以使用该信息在 目标视图控制器。
【讨论】:
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];
}
}
【讨论】:
performSegueWithIdentifier 正如它所说,从您当前的 UIViewController 转换为 segue-connected UIViewController
prepareForSegue 让你在过渡发生之前做一些额外的工作
【讨论】:
执行segue,实际上改变了用户看到的视图。 perform segue 函数会在改变视图之前调用 prepare segue 函数;所以,一般来说,开发人员会在函数 segue 之前将信息传递给该函数中的下一个控制器。
【讨论】: