在xib中嵌套使用xib,如果使用不正确会导致子xib最后加载不出来(具体原因可以查看第一篇参考文章)。可行的方法如下:
-
新建工程,创建test.xib,设置个颜色,拖个label进去。
-
创建test类。
-
选中test.xib中 file's owner,然后在它的Inspector (cmd + opt + 3) 中设置它的Custom Class为test。
-
在test.m中重写
- (instancetype)initWithCoder:(NSCoder *)aDecoder
方法:
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
UIView *containerView = [[[UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil] instantiateWithOwner:self options:nil] firstObject ];
containerView.frame = self.bounds;
[self addSubview:containerView];
}
return self;
}
5.在父xib(storyboard就行)中拖一个View,在该View的Inspector中设置它的Custom Class为test。
6.运行看看效果。
7.如果想要控制test.xib中的label的话,只需要将test.xib中的label与test类中的@property (weak, nonatomic) IBOutlet UILabel *label;
关联即可。
需要注意的点:
加载containerView时需要使用[UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil] instantiateWithOwner:self options:nil]
,而不要使用[[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil] firstObject]
,否则当你将test.xib中的label与test类中的label属性关联后运行程序时会发生崩溃,具体原因不详。。。如果有人晓得的话可以告诉我。。。
参考文章:
网友评论