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.png

image.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]]

image.png

二、指定view的Custom Class

只是把xib的加载路径修改下,其他不变:
[NSBundle mainBundle]改为[NSBundle bundleForClass:[self class]]

image.png

你可能感兴趣的:(iOS开发 xib使用)