为什么在View Controllers之间传递数据与segue一起使用

时间:2015-04-12 10:58:51

标签: ios oop uiviewcontroller segue

为什么Passing Data between View Controllers的以下代码有效? :

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

     if([segue.identifier isEqualToString:@"showDetailSegue"])
     {
         ViewControllerB *controller = (ViewControllerB *)segue.destinationViewController;
         controller.isSomethingEnabled = YES;
     }

}

我看到的一切是他创建了一个ViewControllerB类的实例。我不明白该实例(控制器)如何成为传递该数据的实际ViewController?我错过了什么概念?

1 个答案:

答案 0 :(得分:2)

您发布的代码是而不是实例化新的ViewControllerB实例。在调用prepareForSegue:sender:时,视图控制器已经由故事板实例化并分配给传入的segue的destinationViewController属性。因此,代码实际上只是获取对已经创建并将在segue中使用的视图控制器的引用。

请参阅适用于iOS的View Controller编程指南中的Segues Automatically Instantiate the Destination View Controller部分:

  

segue表示带来新视图的触发转换   控制器进入应用程序的用户界面。

     

Segues包含大量有关转换的信息,包括   以下内容:

     
      
  • 导致segue被触发的对象,称为发件人
  •   
  • 启动segue的源视图控制器
  •   
  • 要实例化的目标视图控制器
  •   
  • 应该用于将目标视图控制器置于屏幕上的转换类型
  •   
  • 标识故事板中特定segue的可选标识符字符串
  •   
     

当触发segue时,iOS会执行以下操作:

     
      
  1. 使用您在故事板中提供的属性值实例化目标视图控制器。
  2.   
  3. 它为源视图控制器提供了配置新控制器的机会。
  4.   
  5. 执行segue中配置的转换。
  6.