自定义控件的步骤和注意点.
纯代码创建:
- 重写initWithFrame(init方法内部会调用这个方法),你如果只是重写init方法的话,使用者可能会调用initWithFarme方法,就不会走你的代码了.
- 重写initWithCoder(xib和storyBoard会调动这个方法)
- 主要在自定义的类archive归档序列化的时候实现NSCoding协议使用的.
- 那么在xib文件代码初始化里面经常出现的initWithCoder可以解释了,因为xib文件涉及非基本类型的数据存储,自然也要实现encodeWithCoder和initWithCoder两个方法,encodeWithCoder方法不需要我们调用,但是initWithCoder还是经常需要用的,所以开放来出来。
- 在initWithCoder:里面访问属性,比如self.button,会发现它是nil的,因为此时自定义控件正在初始化,self.button可能还未赋值.所以建议在awakeFromNib方法中进行初始化的额外操作。因为awakeFromNib是在初始化完成后调用,所以在这个方法里面访问属性(IBOutlet)就可以保证不为nil。** 意思就是在initWithCoder中正在生成控件,在awakeFrameNib中控件已经被生成了,就可以正常访问了. **
- 在layoutSubviews中进行相关布局
- 给出自定义控件的数据变量供外界修改.
- 对外接口中可以将一些控件的属性变量开发,共使用者改变.如轮播器的Lable是否显示隐藏.显示的数量等等.
这个里面都要调用setupUI方法保证使用者通过任何方式创建(不管纯代码和是storyBoard和xib都能够得到这个控件)
xib创建:可以省去initWithframe和layoutSubviews,因为在xib中完成了.
- 对外提供数据接口