iOS 使用nib文件(二)
来源:互联网 发布:小蜜蜂订单系统源码 编辑:程序博客网 时间:2024/05/27 02:29
接着 iOS 使用nib文件(一)来。
在TestNibView.m中有个方法
-(id)initWithCoder:(NSCoder *)aDecoder;
这个方法来自NSCoding协议。NSCoding协议如下,就两个方法。
@protocol NSCoding- (void)encodeWithCoder:(NSCoder *)aCoder;- (id)initWithCoder:(NSCoder *)aDecoder; // NS_DESIGNATED_INITIALIZER@end
nib文件能够保存和恢复对象就需要用到这两个方法。我们在需要归档自己自定义的对象时,也会实现这两个方法。 对于UIView(包括子类)和UIViewController(包括子类)系统都已经实现了这两个方法。使用xib文件实例化对象时,首先
- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options;
会被调用,接着,系统就会调用initWithCoder来实例化实现了NSCoding协议的对象,而没有实现NSCoding协议的对象,会调用其init方法。按照文档描述,initWithCoder只是loadNibNamed方法中的一部分。
在iOS 使用nib文件(一)中说道TestNibView中的一个方法
+(instancetype)testNibView { return [[[NSBundle mainBundle]loadNibNamed:@"TestNibView" owner:self options:nil] firstObject]; }这种使用了单独的xib文件的view只能通过代码去使用,而没有办法在其他的xib中使用。假设在A.xib中,我们拖拽了一个UIView叫做View,将其class设置为TestNibView,这个时候,和TestNibView类关联的xib就不是TestNibView.xib,而是A.xib中View,我们可以在View上加一个按钮,这个按钮可以作为outlet和TestNibView的button关联起来。这样就没有办法利用已经定义好的xib。
需要注意的是initWithCoder方法只是一个init方法,它只是确保init,至于outlet这些关联在这个方法并没有完成关系,这一步,打印self.button是nil。loadNibNamed还会在initWithCoder之后调用awakeFromNib。而到了awakeFromNib方法中,这些outlets、delegate才确保已全部关联,这个方法中[super awakeFromNib]后打印self.button不为空。一般来说,我们并不需要在awakeFromNib中做些什么,除了那些没有办法在xib中设置的东西,重载记得调用[super awakeFromNib]。
还要注意tableView的registerClass和registerNib的区别。前者调用initWithStyle...,不会调用awakeFromNib,后者不会调用initWithStyle...但是会调用awakeFromNib。一般前者用于代码创建的cell,而后者用于使用了xib创建的cell。在initWithStyle里面使用loadNibNamed:加载xib并没有什么意义,还不如直接registerNib。
- iOS 使用nib文件(二)
- iOS 使用nib文件(一)
- IOS 应用Nib文件分析
- 使用NIB文件创建UIVEW
- iOS创建不带nib文件的工程之二--添加视图和视图控制器
- Swift 使用nib文件做iOS界面,在Ios界面跳转传递数据
- iOS验证nib文件是否存在
- ios 将Xib 编为 Nib文件
- iOS NSBundle文件与nib文件——iOS 编码复习(十)
- Nib文件
- Nib文件
- Nib文件
- iOS菜鸟学习——通过nib文件自定义Cell
- ios开发中改变nib文件中的控件大小
- 【IOS】分镜和nib文件的差别
- iOS Nib文件与手动编码初始化区别
- iOS一个类可以关联多个nib文件
- iphone开发中使用nib(xib)文件的内存管理
- Android Fragment 真正的完全解析(下)
- 选择排序
- CentOS 7 grub Linux 修改默认的启动操作系统
- 关于 self 和 super 在oc 中 的疑惑 与 分析
- 插入排序
- iOS 使用nib文件(二)
- 解决android studio编译很慢(整合解决方案)
- 听课练习(三)
- Hibernate学习笔记(一) — hibernate的配置文件简介与执行原理
- windows下用cygwin编译android版ijkplayer
- MFC-控件大全-Slider Control
- POJ 1338 Ugly Numbers dp
- Android Fragment 真正的完全解析(上)
- Arttemplate 前端模板引擎