为什么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?我错过了什么概念?
答案 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会执行以下操作:
- 使用您在故事板中提供的属性值实例化目标视图控制器。
- 它为源视图控制器提供了配置新控制器的机会。
- 执行segue中配置的转换。
醇>