【发布时间】:2013-03-27 12:56:02
【问题描述】:
我正在试验如何将 nib 文件加载到 UIViewController。
我创建了一个单独的 nib 文件,名为 Email。首先我注意到当视图控制器被加载时,initWithNibName 方法没有被调用。所以我像这样从viewDidLoad 方法手动调用它,
[self initWithNibName:@"Email" bundle:[NSBundle mainBundle]];
它没有工作。我还收到一条警告说未使用表达式结果。
我在网上搜索,偶然发现了this 的文章,并实现了loadView 方法,如下所述,
- (void)loadView
{
[super loadView];
UINib *nib = [UINib nibWithNibName:@"Email" bundle:nil];
[nib instantiateWithOwner:self options:nil];
}
方法被调用但视图控制器仍然是空的!
谁能告诉我我在这里忽略了什么以及如何做到这一点?
谢谢。
更新:
首先,感谢所有回复。然而 voromax 和 svena 的回答建议我应该删除 segues 并自动加载我不太喜欢的笔尖。 Anil 的答案很有效,现在我还有最后一个障碍要跳过。
我有多个 nib 文件。根据用户的选择,它应该加载一个特定的笔尖。所以我尝试的是,像这样将所有笔尖放入数组中,
- (void)loadView
{
[super loadView];
NSArray *nibs = [[NSArray alloc] initWithObjects:
[[NSBundle mainBundle] loadNibNamed:@"Facsimile" owner:self options:nil],
[[NSBundle mainBundle] loadNibNamed:@"Email" owner:self options:nil],
[[NSBundle mainBundle] loadNibNamed:@"Memorandum" owner:self options:nil],
[[NSBundle mainBundle] loadNibNamed:@"ProjectMemo" owner:self options:nil], nil];
self.view = [nibs objectAtIndex:0];
}
并使用它的索引来访问它,例如self.view = [nibs objectAtIndex:1];。但它会抛出一个错误 *Terminating app due to unaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM _setViewDelegate:]: unrecognized selector sent to instance 0xd56fd20'*
为什么会出现这个错误?如果不可能,我愿意接受建议。
再次感谢。抱歉有点拖了后腿。
【问题讨论】:
-
你仍然没有在你的问题中提到故事板和自定义逻辑,不是每个人都会阅读所有的 cmets... 查看更新的答案
标签: ios uiviewcontroller xib nib