如何在Swift中创建自定义控件
如果你查看苹果的UIKit参考手册,你会看到许多的控件像 UILabel 和 UIWebView 是直接继承于UIView的。尽管如此,还是有一些棘手的事情,像 UIButton 和UISwitch 是继承于 UIControl ,像如下的层级关系所示:
注意:如果你想查看一个完整的UI组件类层级示意图,请阅读UIKit Framework Reference。
UIControl 使用的是target-action pattern机制,这是一种用于通知用户信息改变的机制。 UIControl 也具有很多的属性来表示当前的控制状态。在这个自定义控件中将使用target-action pattern,所以 UIControl 将担当重要的起始点。
在项目导航中右击CustomSliderExample组然后选择New File…,选择iOS/Source/Cocoa Touch Class模板点击Next。类取名为RangeSlider,在Subclass of中输入 UIControl 并且确保语言选择为Swift。点击下一步然后选择Create以使用默认位置来保存新类。
尽管写代码是件漂亮的事,你可能想看看你的控件在实际屏幕上显示的效果来了解项目的进展!在你写其他代码之前,你可以先将控件添加到view controller中以便我们随时查看控件制作的进展程度。
打开ViewController.swift替换如下:
import UIKitclass
ViewController: UIViewController {
let rangeSlider = RangeSlider(frame: CGRectZero)
override func viewDidLoad() {
super.viewDidLoad()
rangeSlider.backgroundColor = UIColor.redColor()
view.addSubview(rangeSlider)
}
override func viewDidLayoutSubviews() {
let margin: CGFloat = 20.0
let width = view.bounds.width - 2.0 * margin
rangeSlider.frame = CGRect(x: margin, y: margin + topLayoutGuide.length,
width: width, height: 31.0)
}}
上面的代码简单的创建了一个指定过大小的全新控件的实例并且将实例添加到了视图内。控件的背景颜色已经被设置成红色这样可以使其和应用的背景形成鲜明的对比。如果你不将背景设置成红色,你的控件将不容易被找到,你将怀疑你的控件去哪了!:]