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