自定义控件
- 在构造方法中添加子控件
- 提供便利构造类方法 一般以类名命名
- init 方法内部会自动调用 initWithFrame: 方法 内层方法
- initWithFrame: 外层方法
- initWithCode: 从nib文件中初始化时调用
- 实际编程中,我们如果用Interface Builder 方式创建了UIView对象。(也就是,用拖控件的方式)
那么,initWithFrame方法方法是不会被调用的。因为nib文件已经知道如何初始化该View。(因为,我们在拖该view的时候,就定义好了长、宽、背景等属性)。
这时候,会调用initWithCoder方法,我们可以用initWithCoder方法来重新定义我们在nib中已经设置的各项属性。
- 实际编程中,我们如果用Interface Builder 方式创建了UIView对象。(也就是,用拖控件的方式)
- 单独提出控件添加方法(如:setUp) 再将其添加到上述方法中
- 内部添加的控件,用类扩展属性引用(weak)
- 在layoutSubView中布局子控件(自身的frame一改变就会调用这个方法)
- 一定要写[super layoutSubView] (坑!!!)
- layout自动布局后期添加
- 添加一个数据模型接口属性,在这个模型属性的setter方法中给控件添加数据
- 在setter方法中给各个子控件添加数据
优势:
- 隔离, 分层
- 屏蔽代码动荡
- 屏蔽实现细节,好处就是隔离,内部东西改变非常大,外面是不知道的,减小对外界的影响,屏蔽风险