从 segue 加载视图控制器时调用特定的构造函数
Calling specific constructor when loading a view controller from segue
我使用 XCode 6 界面构建器在两个视图控制器之间添加了一个转接。但是它调用默认构造函数。我怎样才能让它为第二个视图调用特定的构造函数?
view 1 -> click button -> activates segue -> calls constructor of view 2 -> displays view 2
不幸的是,使用 segue 是不可能的,您无法进一步指定 如何 destinationViewController
应该被实例化。
但是,您可以自己实例化 UIViewController
,然后手动将其推送到导航堆栈,而不是使用 Storyboard segue。
- (IBAction)buttonTap
{
ViewController2 *vc2 = <your custom constructor>;
[self.navigationController pushViewController:vc2 animated:YES];
}
(请注意,这模仿了 push segue 给你的完全相同的行为)
否则,如果您想继续使用 Storyboard segue 并且您的实际目标是初始化 ViewController2
的某些属性,您可以实现 prepareForSegue:
并在那里设置属性。
- (void)prepareForSegue:(UIStoryboardSegue *)segue
{
ViewController2 *vc2 = segue.destinationViewController;
// set properties here
vc2.prop = xyz;
}
(注意代码未经测试,但它应该传达了主要思想,如果您需要进一步解释,请告诉我)
我使用 XCode 6 界面构建器在两个视图控制器之间添加了一个转接。但是它调用默认构造函数。我怎样才能让它为第二个视图调用特定的构造函数?
view 1 -> click button -> activates segue -> calls constructor of view 2 -> displays view 2
不幸的是,使用 segue 是不可能的,您无法进一步指定 如何 destinationViewController
应该被实例化。
但是,您可以自己实例化 UIViewController
,然后手动将其推送到导航堆栈,而不是使用 Storyboard segue。
- (IBAction)buttonTap
{
ViewController2 *vc2 = <your custom constructor>;
[self.navigationController pushViewController:vc2 animated:YES];
}
(请注意,这模仿了 push segue 给你的完全相同的行为)
否则,如果您想继续使用 Storyboard segue 并且您的实际目标是初始化 ViewController2
的某些属性,您可以实现 prepareForSegue:
并在那里设置属性。
- (void)prepareForSegue:(UIStoryboardSegue *)segue
{
ViewController2 *vc2 = segue.destinationViewController;
// set properties here
vc2.prop = xyz;
}
(注意代码未经测试,但它应该传达了主要思想,如果您需要进一步解释,请告诉我)