swift 純程式碼、xib自定義控制元件
阿新 • • 發佈:2019-02-12
純程式碼
自定義:
使用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