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
自定制控件具有很高的自由度和灵活度,所以是非常有用的,我这里只是很浅显的记录一点开发的过程和遇到的问题,防止以后再出错。
数字键盘控件是一组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
相关文章推荐
- iOS开发系列之常用自定义控件开发集—自定义数字键盘控件开发
- 定制C#TextBox控件中只允许输入数字的解决方法
- IOS开发之---键盘覆盖控件textfield
- iOS键盘弹出的时候会挡住底部的控件,可以通过以下方法将整个UIView上移。
- iOS 之给苹果自带的纯数字键盘添加完成事件
- IOS: iPhone键盘通知与键盘定制
- 数字键盘与数值显示示控件
- IOS: iPhone键盘通知与键盘定制
- IOS: iPhone键盘通知与键盘定制
- 键盘定制iOS学习笔记9-软键盘的隐藏
- ios--解决键盘遮挡UITextField控件的问题(方式二)
- UITextField 文本字段控件 -- IOS (解决键盘遮住View及密文設定的问题)(实例)
- IOS: iPhone键盘通知与键盘定制
- IOS 改变键盘颜色的实现---只有Number Pad和Phone Pad这两种数字键盘才有效果
- IOS: iPhone键盘通知与键盘定制
- ios定制键盘
- UITextField 文本字段控件 -- IOS (解决键盘遮住View及密文設定的问题)(实例)
- iOS cocos2d 实现RollNumber(数字滚动效果)控件效果源码
- ios中修改数字键盘
- 定制的小键盘输入数字显示的LED计分显示屏