2015-11-08 102 views
1

我創建彈出自定義UIView。我創建了custom.xib,custom.swift。在我的custom.xib中,我的所有者對象引用了自定義。我已經在custom.swift和loadNib中實現了名爲「custom」的init func。我從init func獲得了無窮的呼叫,直到我在super.init(coder: aDecoder)得到了這個警告和斷點。自定義UIView的警告

警告:無法加載任何Objective-C類信息。這會使 顯着降低可用類型信息的質量。

的ViewController

let customView: Custom = Custom(frame: CGRectMake(100,100,200,200)) 
self.view.addSubview(customView) 

定製

var view: Custom! 
override init(frame: CGRect) { 
    super.init(frame: frame) 
    loadNib() 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    loadNib() 
} 

private func loadNib() -> Custom { 
    return NSBundle.mainBundle().loadNibNamed("Custom", owner: self, options: nil)[0] as! Custom 
} 

回答

1

loadNib()方法是在這種情況下無用。它返回Custom視圖的實例,但結果從未被init方法使用。你可以聲明loadNib()作爲一個類的方法和Custom類中刪除init

class Custom: UIView { 
    class func loadNib() -> Custom { 
     return NSBundle.mainBundle().loadNibNamed("Custom", owner: self, options: nil)[0] as! Custom 
    } 
} 

然後你可以使用你的loadNib()方法實例Custom視圖直接以這種方式ViewController和變化框架:

let customView = Custom.loadNib() 
customView.frame = CGRectMake(100,100,200,200) 
self.view.addSubview(customView) 
0

您得到此錯誤的原因是因爲您的loadNib()init方法正在引起遞歸。 imnosov的answer應該可以解決你的問題。