自定义视图

自定义视图介绍

自定义视图创建有两种方式。
纯代码方式编写,适合通用控件、组件、三方库等编写。
xib 方式编写,适合非通用、项目特有的、相对复杂的视图。方便快捷。

有两个关键宏添加在自定义视图中有一下效果:
IB_DESIGNABLE 让你的自定 UIView 可以在 IB 中预览。(头文件类声明之前)
IBInspectable 让你的自定义 UIView 的属性出现在 IB 中 Attributes inspector。(头文件属性中)

IB_DESIGNABLE
@interface TestView : UIView
@property (assign, nonatomic) IBInspectable CGFloat cornerRadius;
@end

通过xib创建非通用类型的自定义 view

首先,创建自定义view及其同名xib视图
其次,设置xib的file’owner为该自定义视图,设置xib为*视图(注意:不要设置xib类型)
然后,重写initWithCoder和initWithFrame如下:

#import "TestView.h"

@interface TestView ()

@property (weak, nonatomic) UIView *selfView;

@end

@implementation TestView

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self commonInit];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)coder {
    if (self = [super initWithCoder:coder]) {
        [self commonInit];
    }
    return self;
}

- (void)commonInit {
    NSArray *views = [[NSBundle bundleForClass:[self class]] loadNibNamed:@"TestView" owner:self options:nil];
    _selfView = views.firstObject;
    [self addSubview:_selfView];
}

- (void)layoutSubviews {
    _selfView.frame = self.bounds;
}

@end

获取

NSArray *views = [[NSBundle bundleForClass:[self class]] loadNibNamed:@"HelloView" owner:self options:nil];

必须设置 bundle 为

[NSBundle bundleForClass:[self class]] 

才能在使用 IB_DESIGNABLE 时正确编译。如果将bundle设置为 nil 或者 main 都不行,这样会导致编译器报错。

上一篇:修改ib网卡端口


下一篇:docker安装phpipam