2016年12月15日 星期四

[IOS] 自訂生成按鈕(CustomButton)


範例是在書上看到的,不過程式碼我有改過,因為Swift 3 出來了,而市面書上的範例程式碼... 你懂的

這篇主要是講後端生成程式碼 以Button為例

yourButtonName.addTarget(self, action:#selector(functionName(sender:)), for: .touchUpInside)
fun functionName(sender:UIButton) {
  //....
}

action 這邊 如果沒有回傳值 (sender:) 就不用加了


View 的截圖 自訂12個按鈕


Controller全部程式碼

class ViewController: UIViewController {

    @IBOutlet weak var labelTel: UITextField!
    
    @IBOutlet weak var labelMsg: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        for i in 0...11 {
            let x:Int = 100 + (i % 4) * 60
            let y:Int = 140 + (i / 4) * 60
            let buttonNumber:UIButton = UIButton(type: UIButtonType.system) as UIButton
            //按鈕位置 大小
            buttonNumber.frame = CGRect(x: x,y: y,width: 40, height: 35)
            //文字顏色
            buttonNumber.setTitleColor(UIColor.white, for: UIControlState.normal)
            //按鈕背景
            buttonNumber.backgroundColor = UIColor.black
            //字型大小
            buttonNumber.titleLabel?.font = UIFont(name: "System", size: 22.0)
            if i == 10 {
                buttonNumber.setTitle("X", for: UIControlState.normal)
                 //加入事件 #selector(funcName(sender:)) 函數是有參數的
                buttonNumber.addTarget(self, action:#selector(clearClick(sender:)), for: .touchUpInside)
            } else if i == 11 {
                buttonNumber.setTitle("OK", for: UIControlState.normal)
               
                buttonNumber.addTarget(self, action:#selector(sureClick(sender:)), for: UIControlEvents.touchUpInside)
                
            }else {
                buttonNumber.setTitle("\(i)", for: UIControlState.normal)
                buttonNumber.addTarget(self, action:#selector(numberClick(sender:)), for: UIControlEvents.touchUpInside)
            }
            //加入按鈕
            view.addSubview(buttonNumber)
        }
    }

    func sureClick(sender:UIButton) {
        if labelTel.text?.lengthOfBytes(using: String.Encoding.utf8) == 10 {
            labelMsg.text = "Call " + labelTel.text!
        } else if labelTel.text == "" {
          labelMsg.text = "Please enter your phone number."
        } else if (labelTel.text?.lengthOfBytes(using: String.Encoding.utf8))! > 10{
            labelMsg.text = "Error"
        }
    }
    
    func clearClick(sender:UIButton){
        labelTel.text = ""
        labelMsg.text = ""
    }
    
    func numberClick(sender:UIButton) {
        labelTel.text = labelTel.text! + sender.currentTitle!
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

沒有留言:

張貼留言