iOS开发 xib使用
一、项目中直接加载
一、指定File's Owner的Custom Class
File's Owner 只是 Interface Builder 里的一个占位符,用于方便建立 xib 与 view之间的连接的。就是方便开发者可以用鼠标从 Interface Builder 拉 IBOutlet 到 view 里。没有设置 File's Owner,是不能引线的。除此之外,xib中File's Owner的设置没有任何意义。
既然是占位符,在代码加载 nib 时,Interface Builder 的 File's Owner 设定是不会带到代码里的。当使用 loadNibNamed:owner:options: 加载 nib 时,owner 参数需要传入真正关联的对象的File's Owner,否则那些通过 Interface Builder 设定的 IBOutlet 就会失去连接,一旦当代码使用这些引用就会抛出异常,如下图:
image.png
注意:如果owner传入的对象也有对应的IBOutlet,是不会崩溃的,但是可能就不是我们想要的结果了。
假设我们要加载的xib为:FHSelfOwnerView
image.png image.png
1.加载xib
1.手动加载
FHSelfOwnerView *view = [[FHSelfOwnerView alloc] initWithFrame:self.view.bounds];
view.frame = self.view.bounds;
[self.view addSubview:view];
此加载方式会走
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self commonInit];
}
return self;
}
2.其他xib中加载,例如在Main.storyboard中加载
image.png
此加载方式会走
- (instancetype)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
if (self) {
[self commonInit];
}
return self;
}
2.实现方法
image.pngimage.png
3.owner可以不是self
在commenInit中,owner设置为self。其实也可以设置为其他对象。
1.创建类:FHSelfOwner
2.FHSelfOwnerView.xib中指定File's Owner为FHSelfOwner,把FHSelfOwnerView.xib中的对应与FHSelfOwner中对象关联(contentView、label、按钮点击事件等)。
3.在FHSelfOwnerView.m中实例化对象:FHSelfOwner *selfOwner。
4.指定owner为selfOwner。
image.png
image.png
image.png
二、指定view的Custom Class
假设我们要加载的xib为:FHViewCustomView
image.png
1.加载nib
FHViewCustomView *view = [FHViewCustomView createNib];
view.frame = self.view.bounds;
[self.view addSubview:view];
2.实现方法
image.png二、静态库xxx.framework中加载xib
一、指定File's Owner的Custom Class
只是把xib的加载路径修改下,其他不变
image.png
二、指定view的Custom Class
只是把xib的加载路径修改下,其他不变
image.png
三、动态库xxx.framework中加载xib
一、指定File's Owner的Custom Class
只是把xib的加载路径修改下,其他不变:
[NSBundle mainBundle]
改为[NSBundle bundleForClass:[self class]]
二、指定view的Custom Class
只是把xib的加载路径修改下,其他不变:
[NSBundle mainBundle]
改为[NSBundle bundleForClass:[self class]]