【发布时间】:2010-12-08 00:15:54
【问题描述】:
我开始将更多的视图层次结构转移到 IB。
我有一个名为“AlignmentViewController.xib”的 nib 文件,我在其中设置了以 AlignmentViewController 作为文件所有者的视图层次结构。这很好用。
我仍然模糊不清的方法之一是 awakeFromNib。在 AlignmentViewController 的以下代码 sn-p 中,我添加了单个附加方法 awakeFromNib。但是,它不会被调用:
- (void)awakeFromNib {
NSLog(@"AlignmentViewController - awakeFromNib");
[super awakeFromNib];
}
- (id)initWithChromosomeName:(NSString *)chromosomeName
basepairStart:(NSUInteger)basepairStart
basepairEnd:(NSUInteger)basepairEnd {
self = [self initWithNibName:@"AlignmentViewController" bundle:nil];
if (nil != self) {
self.title = @"Alignment";
self.chromosomeName = chromosomeName;
self.basepairStart = basepairStart;
self.basepairEnd = basepairEnd;
self.wantsFullScreenLayout = YES;
}
return self;
}
有人可以为我澄清一下我在这里错过了什么吗?
干杯, 道格
更新: 在阅读了一些答案后,我意识到我需要深入了解一些非常基本的东西。
看初始化:
- (id)initWithChromosomeName:(NSString *)chromosomeName
basepairStart:(NSUInteger)basepairStart
basepairEnd:(NSUInteger)basepairEnd {
self = [self initWithNibName:@"AlignmentViewController" bundle:nil];
我注意到我正在间接调用 initWithNibName:bundle:。这是不好的做法吗? AlignmentViewController.xib 文件定义了我的视图层次结构。但我并没有真正以典型的方式使用 initWithNibName:bundle: 吗?有没有更好的方法来做到这一点?
【问题讨论】:
-
FWIW,UIViewController 还提供了
viewDidLoad,专门用于在视图加载后(无论是手动还是从 nib)在控制器中进行的任何处理。 -
是的。我广泛使用 viewDidLoad。我只是想将更多的 UI 构造转移到 IB,我需要在某个时候处理 awakeFromNib。
-
使用 IB 并不强制使用
awakeFromNib,也不与使用viewDidLoad相矛盾。
标签: iphone interface-builder nib xib