uiviewController自定义初始化方法与故事板

时间:2012-03-18 06:30:53

标签: ios5 uiviewcontroller uistoryboard

我无法覆盖我在Storyboard中设计的CustomViewController的初始化方法。

现在我正在做(在我的mainViewController中):

self.customViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomVC"];
self.customViewController.myObject = someObject;

我在viewDidLoad(CustomViewController)

    [self.label setText:self.myObject.someString];

这没问题。

但是,这是正确的方法吗?我应该在CustomViewController中添加自定义init方法(或覆盖)吗?像initWithObject:?我不知道如何调用我的自定义初始化方法而不是UIStoryboard instantiateViewControllerWithIdentifier:,而且我没有接到initinitWithNibName的来电。

也许我应该使用:- (id)initWithCoder:(NSCoder *)decoder

请给我一些建议!

谢谢!

2 个答案:

答案 0 :(得分:58)

故事板中视图控制器的指定初始值设定项为-initWithCoder:。由于故事板中的大多数视图控制器都是通过segue创建的,因此您通常会在-prepareForSegue:sender:期间看到状态集。

如果您直接从故事板中实例化视图控制器,就像您提供的示例一样,那么您选择的模式是合适的。

答案 1 :(得分:0)

作为此问题的另一个“解决方法”,您可以使用委派。创建一个协议,作为故事板中UIViewController子类的数据源。符合此数据源协议,实现它并在加载UIViewController子类后立即使用它:

required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)

        //invoke your data source here
    }

我知道......我也不喜欢这个但是......;)