fuz*_*oat 6 iphone cocoa-touch objective-c awakefromnib initwithcoder
我正在开发一个应用程序,其中大部分UI是通过Xcode中的Storyboard设置的.我想要做的一件事是在TabBar上为UITabBarItem指定"完成"图像,而不是可以通过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;
}
Run Code Online (Sandbox Code Playgroud)
要么
- (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"];
}
Run Code Online (Sandbox Code Playgroud)
据我所知,initWithCoder:当出口和操作尚未连接时,在从nib(包含在故事板中)取消归档对象的开始时调用.我也理解awakeFromNib在unarchiving过程结束时调用它并发出viewController现在可以使用的信号.我的感觉是,它实际上只取决于你想做什么,虽然使用awakeFromNib可能证明问题较少,因为你不会遇到出口和行动还没有联系起来的问题.
让我改这个,你会用什么情况下initWithCoder:作为并列于awakeFromNib反之亦然?
看来您已经在编辑之前的段落中回答了自己的问题。
该文档指出
当对象接收到 awakeFromNib 消息时,保证已设置其所有出口实例变量。
因此,如果您必须IBOutlet在初始化代码中访问 ivars,则必须在该awakeFromNib方法中执行此操作。
尽管我更喜欢initWithCoder:不需要访问插座的情况,因为它是NSCoding根据NSCoding文档使用协议解码的对象的正确初始化方法:
initWithCoder:指示对象根据提供的编码器中的数据初始化自身;因此,它取代了任何其他初始化方法,并且每个对象仅发送一次
不过,作为旁注,它并没有太大区别,并且在我必须在初始化代码中访问出口的情况下,为了简单起见,我不会awakeFromNib同时实现这两者。initWithCoder:因此,如果涉及到网点,我通常会awakeFromNib在那里实施并进行所有初始化。
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |