我可以将segues与视图控制器的指定初始化器一起使用吗?

时间:2012-01-21 12:38:17

标签: objective-c ios uistoryboard segue

我是故事板的新手,我已经设置了一个从按钮到视图控制器的segue。此视图控制器属于自定义子类SFListViewController,它具有指定的初始值设定项initWithList:

使用指定的初始化程序是正确初始化视图控制器的唯一方法。但是,当使用segues时,不会调用指定的初始值设定项(显然)。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  if ([segue.identifier isEqualToString:@"Show List"]) {
    SFListViewController *listViewController = segue.destinationViewController;
    // ????
  }
}

如何在执行时让segue调用指定的初始值设定项?

1 个答案:

答案 0 :(得分:5)

据我所知,这是不可能的,因为故事板框架只是在您在Interfacebuilder中定义的类上调用allocinit。此外,segue的destinationViewController属性是只读的,因此您不能简单地替换现有的ViewController。

使用Storyboarding的唯一方法可能是创建一个包装类,在内部实例化具有所需属性的SFListViewController,然后作为代理对象运行,从而传播viewDid***和{{1 - 包装类的方法,并在只读viewWill***属性中返回包装的VC视图......你明白了。

通常,在这种情况下,有许多其他方法可以初始化view

  1. 可以选择指定“用户定义的运行时属性”,可以用于初始化。

  2. 在您的根ViewController中覆盖UIViewController方法,就像您尝试的那样,并在那里执行“post-alloc-init-initialisation”。

  3. 如果最糟糕的情况发生,您可以回退到prepareForSegue:,以便能够自己初始化ViewController。

  4. 我希望这会有所帮助。

    编辑:我可以验证代理方法的工作原理,因为我遇到了IBAction类似的问题,这种方法效果很好。由于我们在故事板中设置了这个内容,请注意您必须使用ABPeoplePickerNavigationController才能进行初始配置(而不是某些awakeFromNib方法)。

    这是我的包装类的代码:

    init