iOS中xib加载xib问题

热门标签

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

由于业务中有重复的view所以我打算抽出来复用,为了简便我用了xib(A),一直以来都是直接在下面的view中关联class,一直没有问题。然后就直接放到另外的xib(B)中了,运行发现空白一片。断点发现A初始化了,但是A里面的资源没有初始化。

几番度娘终于解决:

在A中拖好控件后,需要在B中的.m文件中重写 initWithCode:(NSCoder*)aDecoder 方法,本意上A加载B无法直接加载到B的xib资源,所以我们在归档的方法中手动的去加载这个资源,

"一般对于这种需求,我们会选择在 init(coder:) 中加载目标 nib 然后将它作为 subview 添加到目标 view 中。"

那么重点来了, 很多人提到说在归档方法中会死循环,确实在loadnib方法中也会调用到归档方法, 所以这里要特别注意一下, 在B的xib文件中,关联头文件很重要, 只需在File's Owner 关联类, 而在view上是不需要关联的,所以这个xib有什么属性也是在File's Owner 上来关联。

xib(B)

@interface SPTNWSContentLabelView()

@property (nonatomic, strong) UIView *customView;

@property (nonatomic, weak) IBOutlet UILabel*showLabel;  //标签

@property (nonatomic, weak) IBOutlet UILabel *authorNameLabel; //作者

@property(weak,nonatomic)IBOutletNSLayoutConstraint*authorNameLabelLeading;

@property (nonatomic, weak) IBOutlet NSLayoutConstraint *timeLabelLeading;

@end

@implementationSPTNWSContentLabelView

- (instancetype)initWithCoder:(NSCoder*)aDecoder {

    if(self= [superinitWithCoder:aDecoder]) {

        _customView = [[SPTNWSCommonHelper newsBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil].firstObject;

        [self addSubview:_customView];

        _customView.sn_insets(UIEdgeInsetsZero).sn_layout();

    }

    return self;

}

 

重点:

1、必须要用 loadNibNamed:方法加载一个_customView,然后作为子view添加到self上。这样该xib的子视图就都能初始化并显示。

2、必须要设置_customView的frame

 

iOS中xib加载xib问题

 

标签:

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术Dog|博客
原文地址:《iOS中xib加载xib问题》 发布于2019-10-03

分享到:
赞(0)

评论 抢沙发

1 + 5 =


iOS中xib加载xib问题

长按图片转发给朋友

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录