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)