发布于 2014-11-22 15:36:21 | 633 次阅读 | 评论: 0 | 来源: 网友投递
这里有新鲜出炉的Swift教程,程序狗速度看过来!
Swift编程语言
SWIFT,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。
本文为大家讲解的是swift 开发中自定制控件(数字键盘)的示例代码,感兴趣的同学参考下。
最近学习ios编程,启用了swift语言,非常高效的一门语言,个人觉得如果熟练的话要比objective-c强很多。话不多说,今天写一下自定制控件的学习过程。</span>
自定制控件具有很高的自由度和灵活度,所以是非常有用的,我这里只是很浅显的记录一点开发的过程和遇到的问题,防止以后再出错。
数字键盘控件是一组11个按钮组成的键盘式控件,其中有0~9个数字和一个清楚建。点击11个按钮在数字键盘的响应函数中可以访问控件的pressNum属性,查看被点击的数字,其中的清除键设置为-1。
图片好大啊!首先我们需要创建一个继承自UIView 的类,然后定义一个按钮数组,和一个层数组,就是在view上添加11个大小设计好的层,然后把按钮绑定到层上。让按钮没有背景色,这样我们就可以在层上画我们需要的图案了,就如上图所示,画一个方框。
@IBDesignable class KeyPad: UIView {
var buttons:[UIButton] = []
var layers: [CALayer] = []
下面我要定义响应事件,也就是用户点击我们的数字键盘控件,我们应该出发哪个事件,这个事,控件拿到别处用时 的街口。
typealias buttonTouchInsideEvent = (sender: UIButton) -> ()
var onButtonTouch: buttonTouchInsideEvent!
定义初始化函数,这个控件和其他控件一样可以采用初始化frame的方式初始化控件的位置和大小。
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
}
override init(frame: CGRect) {
super.init(frame: frame)
self.setup()
}
setup()函数中要处理初始化层和按钮的操作,然后要把按钮的被点击事件绑定到整个大控件keypad的响应事件中。
func setup(){
createNumLayer()
createNumBtn()
self.userInteractionEnabled = true
for i in 0...10{
self.buttons[i].addTarget(self, action: "onPress:", forControlEvents: .TouchDown)
self.buttons[i].addTarget(self, action: "onRealPress:", forControlEvents: .TouchUpInside)
self.buttons[i].addTarget(self, action: "onReset:", forControlEvents: .TouchUpInside)
self.buttons[i].addTarget(self, action: "onReset:", forControlEvents: .TouchUpOutside)
self.buttons[i].addTarget(self, action: "onReset:", forControlEvents: .TouchDragExit)
self.buttons[i].addTarget(self, action: "onReset:", forControlEvents: .TouchCancel)
whichNum = i
}
}
接下来我们看看11个按钮被点击后都绑定了onRealPress方法
func onRealPress(sender: AnyObject) {
self.onButtonTouch(sender: sender as UIButton)
}
其实onRealPress方法是触发了上面定义的onButtonTouch的事件,这个事件在外面调用的情况是:
keyBoard = KeyPad(frame: getPos())
keyBoard.borderColor = UIColor.GNColor().CGColor
keyBoard.borderWidth = 2
keyBoard.labelColor = UIColor.GNColor()
keyBoard.labelText = "testKeyPad"
keyBoard.labelFontSize = 32
keyBoard.onButtonTouch = {(sender : UIButton) in self.test()}
这是外面的viewcontroller初始化了一个KeyPad控件(数字键盘)然后把onButtonTouch事件绑定在了test()方法上,这样我们点击数字键盘控件后就回回调test()方法,在这里我们可以访问keBoard 的pressNum属性,查看是哪个数字被点击了。
除此之外,我们还可以在KeyPad类里做一些接口设置比如:
@IBInspectable var borderColor: CGColor! {
didSet {
for i in 0...10{
self.layers[i].borderColor = borderColor
}
}
}
@IBInspectable var borderWidth: CGFloat = 50 {
didSet {
for i in 0...10{
self.layers[i].borderWidth = borderWidth
}
}
}
@IBInspectable var borderCornerRadius: CGFloat = 0.0 {
didSet {
for i in 0...10{
self.layers[i].cornerRadius = borderCornerRadius
}
}
}
@IBInspectable var xxx这样设置层的属性,我们可以在控件的interfacebuilder属性栏里直接设置,非常方便。
最后整个测试是使用了数字键盘点击会在上面显示哪个数字被点击,当然也可以删除数字。