swift UIView 加載XIB

在項目中創(chuàng)建swift文件,直接復制下面代碼粘貼即可。

///  有此協(xié)議并UIView遵守協(xié)議后。創(chuàng)建同名xib并綁定view為當前view。則可直接通過 loadFromNib 創(chuàng)建view。
///  若需要添加 loadFromNib 的參數(shù)可自行添加當前view遵守NibLoadable時的 loadFromNib 方法
///如:
/**
extension NibLoadable where Self : YourCustomView {
    //在協(xié)議里面不允許定義class 只能定義static
    static func loadFromNib(_ nibname: String? = nil ,dat data:Array<Dictionary<String, Any>>? = nil) -> Self {
        let view = UIView.loadFromNib("\(self)") as! Self
        view.datas = data
        return view
    }
}
 // 直接給自己的view添加初始化方法更好,因為class中可以直接使用supper,而不必傳“/(self)"來初始化
 extension YourCustomView{
     class func loadFromNib(_ nibname: String? = nil ,dat data:Array<Dictionary<String, Any>>? = nil) -> Self {
         let view = super.loadFromNib() as! Self
         view.datas = data
         return view
     }
 }
 
*/
protocol NibLoadable {
}
extension NibLoadable where Self : UIView {
    //在協(xié)議里面不允許定義class 只能定義static
    static func loadFromNib(_ nibname: String? = nil ) -> Self {
        //Self (大寫) 當前類對象 //self(小寫) 當前對象
        let loadName = nibname == nil ? "\(self)" : nibname!
//        Bundle.main.loadNibNamed("PrepareView", owner: self, options: nil)
        let view = Bundle.main.loadNibNamed(loadName, owner: nil, options: nil)?.first as! Self
        view.frame = CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight)
        return view
    }
    static func viewFromNib(_ nibname: String? = nil ) -> Self {
        return loadFromNib(nibname)
    }
}
extension UIView :NibLoadable{}


使用

 override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
//        let v = YourCustomView.loadFromNib()  // 所有UIview 都有這個加載方法
        let v = YourCustomView.loadFromNib(dat:[["1":"2"]]) //  自行為自己的view添加初始化時的入?yún)?dat
        self.view.addSubview(v)
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容