1. 程式人生 > >swift 純程式碼、xib自定義控制元件

swift 純程式碼、xib自定義控制元件

純程式碼

自定義:

import UIKit

class CustomView: UIView {
    var lab:UILabel!
    var btn:UIButton!

    override init(frame: CGRect) {
        super.init(frame: frame)

        //初始化
        lab = UILabel()
        lab.textAlignment = .center
        lab.font = UIFont.systemFont(ofSize: 12)
        self.addSubview(lab)

        btn = UIButton()
        self.addSubview(btn)

    }

    override func layoutSubviews() {
        super.layoutSubviews()

        //設定 子控制元件 frame, 也可以在這裡使用自動佈局
        lab.frame = CGRect(x:10, y:10, width:100, height:40)

        btn.frame = CGRect(x:lab.frame.origin.x, y:lab.frame.maxY + 10, width:100, height:40)

    }

    //傳入model對子控制元件進行配置,這裡暫用NSObject
    func setUp(model:NSObject) {
        lab.text = "你好"//model.xx

        btn.setTitle("確定", for: .normal) //title:model.xx
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}
使用
//純程式碼 view
        let view = CustomView()
        view.frame = CGRect(x:10, y:100, width:200, height:100)
        view.backgroundColor = UIColor.cyan
        view.setUp(model: "" as NSObject)
        self.view.addSubview(view)


xib

自定義:

新建個view,再新建個同名的xib檔案,在xib的 Identity insperctor (面板第三個按鈕)裡設定class為新建的view檔名

import UIKit

class CustomXibView: UIView {

    @IBOutlet weak var nameTF: UITextField!

    @IBOutlet weak var sexTF: UITextField!

    class func instantiateFromNib() -> CustomXibView {
        return Bundle.main.loadNibNamed("CustomXibView", owner: nil, options: nil)?.first as! CustomXibView
    }

    //用約束在xib裡設定frame
    override func draw(_ rect: CGRect) {
        super.draw(rect)
        //設定一些子檢視的固定屬性
        nameTF.font = UIFont.systemFont(ofSize: 12)

        sexTF.font = UIFont.systemFont(ofSize: 12)
    }

    func setUp(model:NSObject) {
        //傳入model對子控制元件進行配置,這裡暫用NSObject
        nameTF.placeholder = "請輸入姓名"

        sexTF.placeholder = "請輸入性別"
    }

}

使用
//xibView
        let xibView = CustomXibView.instantiateFromNib()
        xibView.frame = CGRect(x:10, y:view.frame.maxY + 10, width:200, height:100)
        self.view.addSubview(xibView)

這篇文章裡有一些原理的解釋:http://www.jianshu.com/p/7e47da62899c