咱就举个栗子:
我一个tableviewcell.xib(A) 中要使用一个我自定义好的一个 view.xib(B)
在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 上来关联,
以下就是具体操作了
.h文件
#import <UIKit/UIKit.h>
@class RecordArray;
@interface MaterialAccountRecordView : UIView
@property (nonatomic, strong) MaterialAccountRecordView *customView;
@end
.m文件
#import "MaterialAccountRecordView.h"
@interface MaterialAccountRecordView ()
@end
@implementation MaterialAccountRecordView
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
NSString *className = NSStringFromClass([self class]);
_customView = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];
_customView.gjcf_size = CGSizeMake(ScreenW - 20, self.bounds.size.height);
[self addSubview:_customView];
}
return self;
}
@end
以上,谢谢