您的位置:首页 > 移动开发 > Swift

iOS swift 自定制控件(数字键盘)

2014-10-17 20:09 288 查看
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">最近学习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属性栏里直接设置,非常方便。
最后整个测试是使用了数字键盘点击会在上面显示哪个数字被点击,当然也可以删除数字。

代码在github上

点击打开链接
https://github.com/LindaWin/Numerical-keypad-using-Swift.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  控件 swift ios uiview github