这个自定义控件提供对外接口方法,为自定义的控件赋值
- (void)configeWithImage:(UIImage *)image {
_imageView.image = image;
}
最后,添加自定义控件到页面上
_circleImageView = [[CircleImageView alloc] initWithFrame:CGRectMake(0, 80, 150, 150)];
[_circleImageView configeWithImage:[UIImage imageNamed:@"tree"]];
[self.view addSubview:_circleImageView];
通过xib创建自定义控件
首先创建一个自定义控件XibCircleImageView,继承自UIView
创建xib文件,与XibCircleImageView类同名
配置xib中imageView的属性,并将XibCircleImageView 类与对应的xib文件进行绑定
代码如下
- (void)awakeFromNib {
[super awakeFromNib];
_imageView.layer.masksToBounds = YES;
_imageView.layer.cornerRadius = self.frame.size.width/2;
// [self addSubview:_imageView];
}
- (void)configeWithImage:(UIImage *)image {
_imageView.image = image;
}
-(void)layoutSubviews {
[super layoutSubviews];
_imageView.layer.cornerRadius = self.frame.size.width/2;
}
在页面中调用方式有点不同,通过loadNibNamed方法创建xib对象
//使用xib创建自定义控件
_xibCircleImageView = [[[NSBundle mainBundle] loadNibNamed:@"XibCircleImageView" owner:nil options:nil] lastObject];
_xibCircleImageView.frame = CGRectMake(0, 500, 100, 100);
[_xibCircleImageView configeWithImage:image];
[self.view addSubview:_xibCircleImageView];
当使用xib创建自定义控件时,初始化不会调用initWithFrame:方法,只会调用initWithCoder:方法,初始化完毕后才调用awakeFromNib方法,注意要在awakeFromNib中初始化子控件。因为initWithCoder:方法表示对象是从文件解析来的,就会调用,而awakeFromNib方法是从xib或者storyboard加载完毕后才会调用。
小结
这两种创建自定义控件的方式各有优劣,纯代码方式比较灵活,维护和扩展都比较方便,但写起来比较麻烦。xib方式开发效率高,但不易扩展和维护,适合功能样式比较稳定的自定义控件。










