我非常混淆“执行segue与标识符”和“准备segue ”......这些功能的作用以及它们如何工作?
答案 0 :(得分:8)
prepareForSegue准备在视图控制器之间传递的数据,其中带有标识符的performSegue实际上允许切换发生。
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函数;因此,通常,开发人员会在信息发生之前将信息传递给该函数中的下一个控制器。