viewController与故事板的自定义init方法
即时通讯有困难重写我的Storyboard中devise的CustomViewController的初始化方法。
现在即时通讯(在我的mainViewController):
self.customViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomVC"]; self.customViewController.myObject = someObject;
我有viewDidLoad(CustomViewController)
[self.label setText:self.myObject.someString];
这工作正常。
但是,这是正确的方法吗? 我应该添加一个自定义的init方法(或覆盖)到我的CustomViewController? 像initWithObject:? 我不知道如何调用我的自定义init方法而不是UIStoryboard instantiateViewControllerWithIdentifier:
而我没有得到调用init
或initWithNibName
。
也许我应该使用: - (id)initWithCoder:(NSCoder *)decoder
。
请给我一些build议!
谢谢!
故事板中视图控制器的指定初始化程序是-initWithCoder:
由于故事板中的大多数视图控制器都是通过segse创build的,所以在-prepareForSegue:sender:
通常会看到状态设置。
如果您直接从故事板实例化视图控制器(如您提供的示例),那么您select的模式是适当的。
作为此问题的另一个“解决方法”,您可以使用委派。 创build一个协议,作为故事板中的UIViewController子类的数据源。 遵循这个数据源协议,在加载你的UIViewController子类之后执行它并使用它:
required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) //invoke your data source here }
我知道…我也不喜欢这个,但…;)