主要考虑以下几个问题
从xib创建自定义view
纯代码创建自定义view
在故事版中使用
纯代码方式创建
头文件
@interface XXXBaseView : UIView
#pragma mark - overridder
// 在init之后执行,初始化配置工作
- (void)setup;
@end
实现文件
#import "XXXBaseView.h"
@interface XXXBaseView ()
// 从xib中加载的view
@property (strong, nonatomic) UIView *xibView;
@end
@implementation XXXBaseView
#pragma mark - life cycle
// 从xib加载
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
// 代码创建
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
// 布局,紧贴容器
- (void)layoutSubviews {
[super layoutSubviews];
// 让xib加载的view紧贴容器
if (self.xibView) {
[self.xibView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(0);
make.bottom.mas_equalTo(0);
make.left.mas_equalTo(0);
make.right.mas_equalTo(0);
}];
}
}
#pragma mark - overridder
// 在init之后执行,初始化配置工作
- (void)setup {
// 如果与同名的xib文件存在,就加载
NSString *className = NSStringFromClass([self class]);
NSString *filePath = [NSString stringWithFormat:@"%@/%@.nib",[[NSBundle mainBundle] resourcePath], className];
BOOL isNibExist = [[NSFileManager defaultManager] fileExistsAtPath: filePath];
if (isNibExist) {
// 如果nib文件不存在,loadNibNamed会崩溃
self.xibView = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil].firstObject;
[self addSubview:self.xibView];
}
}
@end