我正在开发一个应用程序,其中大部分 UI 是通过 Xcode 中的 Storyboard 设置的。我想做的一件事是为 TabBar 上的 UITabBarItems 指定“完成”图像,而不是您可以通过 Interface Builder 访问的默认“Stencilled”图像。
我的问题是在哪里执行此操作的最佳位置,我目前正在 awakeFromNib 中执行此操作,因为当从情节提要中取消归档内容时需要执行此操作,但我不确定是否应该使用 initWithCoder: 代替,这是最好的有关系吗?
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if(self) {
UIImage *tabIn = [UIImage imageNamed:@"TAB_IN"];
UIImage *tabOut = [UIImage imageNamed:@"TAB_OUT"];
UITabBarItem *tabBarItem = [self tabBarItem];
[tabBarItem setFinishedSelectedImage:tabOut withFinishedUnselectedImage:tabIn];
[tabBarItem setTitle:@"TWO"];
}
return self;
}
或者
- (void)awakeFromNib {
[super awakeFromNib];
UIImage *tabIn = [UIImage imageNamed:@"TAB_IN"];
UIImage *tabOut = [UIImage imageNamed:@"TAB_OUT"];
UITabBarItem *tabBarItem = [self tabBarItem];
[tabBarItem setFinishedSelectedImage:tabOut withFinishedUnselectedImage:tabIn];
[tabBarItem setTitle:@"TWO"];
}
我知道initWithCoder:
当出口和动作尚未连接时,在从笔尖(包含在故事板中)取消归档对象开始时调用。我也知道awakeFromNib
在取消归档过程结束时会调用它,并表示 viewController 现在可以使用了。我的感觉是,这实际上取决于您想做什么,尽管使用awakeFromNib
可能会证明问题较小,因为您不会遇到尚未连接出口和操作的问题。
编辑:
让我换个说法,你会在什么情况下使用initWithCoder:
,awakeFromNib
反之亦然?