一个视图控制器
FooViewController
在创建时需要进行一些初始化(针对它本身而不是托管的视图-甚至在视图加载之前)。我希望能够以两种方式创建它:1.以编程方式,可能带有一些参数。2.在Interface Builder中。对于(1),我会像这样编写初始化程序:(以下省略)当在Interface Builder中创建时,我希望最终结果与使用无参数的init
初始化对象相同。现在如果我只是这样做:- (id)initWithCoder:(NSCoder *)decoder{return [self init];}
则会忽略在Interface Builder中设置的title
、wantsFullScreenLayout
和nibName
属性,但这没关系。nibName在init
中硬编码,并且在任何情况下都可以通过编程方式实例化控制器,因此在那里设置title
。问题在于parentViewController
没有被设置(默认的initWithCoder:
会根据NIB中的对象层次结构设置它)。我该如何从nib中获取父对象?然后我将initWithCoder:
更改为类似于:(以下省略)或者我应该使用一些不同的方法来创建既可以通过编程方式实例化又可以在IB中实例化的控制器吗?
[self class]
应该只是self
吗?如果是这样的话,你实际上并没有从 NIB 中加载视图控制器。UIViewController 的 nibName 属性是其视图的 NIB,而不是控制器本身。我认为为每个控制器准备两个 NIB(一个用于自身,一个用于视图)不是正确的方法... :/ - Jaka Jančar