[英]How to init custom UIView in Swift 1.2
我希望以編程方式初始化一個UIView
子類,該子類應該使用一個Int來初始化。 我正在尋找做這樣的事情:
class OneFingerView: UIView
{
let id: Int
init(id: Int)
{
self.id = id
super.init()
}
required init(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
}
}
但是得到一個錯誤
必須調用超類UIView的指定初始化程序
我在此之前的嘗試如下:
class OneFingerView: UIView
{
let id: Int
var delegate: OneFingerViewProtocol? = nil
init(id: Int, frame: CGRect)
{
self.id = id
super.init(frame: frame)
}
override init(frame: CGRect)
{
super.init(frame: frame)
}
}
但是然后我得到一個錯誤,我沒有實現init(coder :)。
我該怎么做呢? 不管我采用哪種方法,似乎都有各種錯誤的無盡循環。
覆蓋initWithFrame並調用super.init(frame:)
我的評論打錯了。 您還需要實現init(coder :)在該方法中,您將無法提供id參數,而需要在其他位置進行設置。 您可能會考慮制作id屬性IBInspectable並將其設置在IB中。
init(coder:)
方法旨在保存所需的自定義子類屬性。 您要做的是重寫init(coder:)
和encodeWithCoder()
。 在這些方法中,您將調用超級版本,然后在自定義代碼中加載/保存您的額外屬性(使用NSKeyedUnarchiver
和NSKeyedArchiver
的方法)。
但是, init(coder:)
和encode(coder:)
對於在IB中創建的對象不是很有用,因為IB不會為您設置自定義屬性。 最好僅使用簡單地調用super的vanilla init(coder:)
,並在代碼中或使用IBDesignable屬性配置對象,如上所述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.