Swift-便捷化Xib视图加载

2022-11-28  本文已影响0人  查理布朗Bio

一、创建Xib加载父类

/// 继承了UIView的Xib加载类
class DrawOnXibView: UIView {
    /// 画布
    @IBOutlet weak var canvas: UIView!
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        loadCanvas()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        loadCanvas()
    }
    
    /// 加载画布(用于代码层加载画布,否则无法展示xib视图)
    private func loadCanvas() {
        let xibName = String(describing: type(of: self))
        guard Bundle.main.url(forResource: xibName, withExtension: "nib") != nil else {
            fatalError("\(xibName).xib file not exsit")
        }
        Bundle.main.loadNibNamed(xibName, owner: self, options: nil)
        //将画布加载至主图层
        addSubview(canvas)
        //设置布局
        canvas.translatesAutoresizingMaskIntoConstraints = false
        [
            canvas.leadingAnchor.constraint(equalTo: leadingAnchor),
            canvas.trailingAnchor.constraint(equalTo: trailingAnchor),
            canvas.topAnchor.constraint(equalTo: topAnchor),
            canvas.bottomAnchor.constraint(equalTo: bottomAnchor)
        ].forEach({ $0.isActive = true })
    }
}

二、创建自定义视图类

1.创建继承加载类的自定义类以及对应的xib文件

继承DrawOnXibView的.swift以及.xib文件

2.绑定.xib与.swift文件

绑定.xib对应类

按下列步骤进行绑定
①File's Owner
②Show the identity inspector
③Custom class - 设置关联的.swift文件名

3.绑定对应的画布视图

拉线canvas至对应UIView以绑定画布

三、完善xib类的初始化

class CustomXibView: DrawOnXibView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        initialization()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        initialization()
    }
    
    convenience init(frame: CGRect, data: Any) {
        self.init(frame: frame)
        loadData(data: data)
    }
    
    /// 待初始化方法
    private func initialization() { }
    
    /// 待加载数据
    private func loadData(data: Any) { }
}

四、自定义类的调用

let custom = CustomXibView(frame: CGRect(x:0, y:0, w:100, h:100), data: data)
view.addSubview(custom)
上一篇 下一篇

猜你喜欢

热点阅读