带有序列图像板的viewController自定义init方法



im在重写Storyboard中设计的CustomViewController的初始化方法时遇到问题。

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

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

我在视图中有DidLoad(CustomViewController)

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

这还可以。

但是,这是正确的方式吗?我应该向我的CustomViewController添加一个自定义init方法(或重写)吗?像initWithObject:?我不知道如何调用我的自定义init方法而不是UIStoryboard instantiateViewControllerWithIdentifier:,我也没有得到对initinitWithNibName的调用。

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

请给我一些建议!

谢谢!

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

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

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

required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
        //invoke your data source here
    }

我知道。。。我也不喜欢这个,但是…;)

最新更新