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

本文介绍了如何在iOS中自定义一个数字键盘控件,该控件由11个按钮组成,包括0-9数字及清除键。通过绑定按钮到UIView的子层,并自定义样式,实现了数字显示和清除功能。代码已上传至GitHub。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值