我是故事板的新手,我已经设置了一个从按钮到视图控制器的segue。此视图控制器属于自定义子类SFListViewController
,它具有指定的初始值设定项initWithList:
。
使用指定的初始化程序是正确初始化视图控制器的唯一方法。但是,当使用segues时,不会调用指定的初始值设定项(显然)。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"Show List"]) {
SFListViewController *listViewController = segue.destinationViewController;
// ????
}
}
如何在执行时让segue调用指定的初始值设定项?
答案 0 :(得分:5)
据我所知,这是不可能的,因为故事板框架只是在您在Interfacebuilder中定义的类上调用alloc
和init
。此外,segue的destinationViewController
属性是只读的,因此您不能简单地替换现有的ViewController。
使用Storyboarding的唯一方法可能是创建一个包装类,在内部实例化具有所需属性的SFListViewController
,然后作为代理对象运行,从而传播viewDid***
和{{1 - 包装类的方法,并在只读viewWill***
属性中返回包装的VC视图......你明白了。
通常,在这种情况下,有许多其他方法可以初始化view
:
可以选择指定“用户定义的运行时属性”,可以用于初始化。
在您的根ViewController中覆盖UIViewController
方法,就像您尝试的那样,并在那里执行“post-alloc-init-initialisation”。
如果最糟糕的情况发生,您可以回退到prepareForSegue:
,以便能够自己初始化ViewController。
我希望这会有所帮助。
编辑:我可以验证代理方法的工作原理,因为我遇到了IBAction
类似的问题,这种方法效果很好。由于我们在故事板中设置了这个内容,请注意您必须使用ABPeoplePickerNavigationController
才能进行初始配置(而不是某些awakeFromNib
方法)。
这是我的包装类的代码:
init