发布于 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属性栏里直接设置,非常方便。
 
 
最后整个测试是使用了数字键盘点击会在上面显示哪个数字被点击,当然也可以删除数字。
 


最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务