如果想要自定义控件 需要先了解各个控件都是干什么用的 如果这个控件满足了你的需求 完全可以直接用 不要自定义 比如用UITableViewCell的时候 如果只是显示一行字 完全可以用原生的UITableViewCell 设定textLabel
如果实在不能用原生的 那只能自己写了 一般看你要做的东西
- 如果线条很简单 或者对性能要求非常高 可以直接画出来 那就在drawRect方法里
- 如果有界面比较规整 看起来就是 一个view 套着一个view的 就直接在init的时候创建了这些view。注意 如果要用interface builder 拖控件 一定要重写 initWithCoder 在这里frame也是设置好的 可以直接设置子view的frame 。如果控件的frame可以动态变更 可以有三种方法更改子view的frame:
- 直接设置autoresizingMask属性(在autoresizingMask里 上下左右是颠倒的)
- 重写setFrame函数 在里面设置子frame
- 重写drawRect 在里面设置frame
自定义的控件也是基于UIKit框架的,文档中说道UIKit的对象有三种用法
- Use the Interface Builder development application to drag windows, views, and other objects from an object library.也就是拉控件
- Create, position, and configure framework objects programmatically.用代码写控件,这应该是最常用的方法
- Implement custom user-interface objects by subclassing UIView or classes that inherit from UIView.继承UIView来自定义控件
所以想自定义控件就得继承UIView,然后重写- (void)drawRect:(CGRect)rect方法来绘制自己的控件。
其实UIKit里的所有的自带控件都是继承自NSObject->UIResponder->UIView的