2017-03-18 13 views
-1

如何調用從.xib文件加載的視圖的便捷初始化程序? 我已經初始化器定義如下:如何使用loadNibNamed加載視圖時調用UIView上的Convenient Initialiser?

class CustomView : UIView{ 
    var prop1:Int 
    var prop2:Int 
    convenience init(prop1:Int, prop2:Int, frame:CGRect){ 
     self.prop1 = prop1 
     self.prop2 = prop2 
     super.init(frame:frame) 
    } 
} 

現在,我怎麼能得到這個初始化器執行的,如果我想從它的相關的.xib文件實例化customView這樣

Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)?.first as! CustomView 

感謝。

+0

當你從xib加載然後你調用'init?(coder aDecoder:NSCoder)' –

+0

簡答題;你不能。在創建視圖後設置屬性,或者在nib中指定它們,並按照Adrian的建議使用init(編碼器) – Paulw11

回答

0

正如@Paulw所說,你不能。從xib/storyboard加載的視圖始終使用init(coder:)進行初始化。所述UIView reference狀態:在一個筆尖文件

對象被複原,然後使用 其初始化(編碼器:)初始化方法,該方法修改視圖 的屬性相匹配存儲在所述筆尖文件的屬性。

如果要在Interface Builder中設置自定義視圖,並且要設置自定義屬性,可以使這些屬性爲IBInspectable

class CustomView: UIView { 

    @IBInspectable var prop1: Int 
    @IBInspectable var prop2: Int 

} 

然後,你會看到他們在屬性檢查器中,當您選擇在Interface Builder該視圖(請務必類設置爲您的身份檢查類的名稱)。

Interface Builder Attributes Inspector showing IBInspectable properties

NSHipster對IBInspectable here一個偉大的文章。

相關問題