自定义view的基类

主要考虑以下几个问题

  • 从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

参考文章

iOS验证nib文件是否存在

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容