我无法覆盖我在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:
,而且我没有接到init
或initWithNibName
的来电。
也许我应该使用:- (id)initWithCoder:(NSCoder *)decoder
。
请给我一些建议!
谢谢!
答案 0 :(得分:58)
故事板中视图控制器的指定初始值设定项为-initWithCoder:
。由于故事板中的大多数视图控制器都是通过segue创建的,因此您通常会在-prepareForSegue:sender:
期间看到状态集。
如果您直接从故事板中实例化视图控制器,就像您提供的示例一样,那么您选择的模式是合适的。
答案 1 :(得分:0)
作为此问题的另一个“解决方法”,您可以使用委派。创建一个协议,作为故事板中UIViewController子类的数据源。符合此数据源协议,实现它并在加载UIViewController子类后立即使用它:
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
//invoke your data source here
}
我知道......我也不喜欢这个但是......;)