簡體   English   中英

如何在Swift 1.2中初始化自定義UIView

[英]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() 在這些方法中,您將調用超級版本,然后在自定義代碼中加載/保存您的額外屬性(使用NSKeyedUnarchiverNSKeyedArchiver的方法)。

但是, init(coder:)encode(coder:)對於在IB中創建的對象不是很有用,因為IB不會為您設置自定義屬性。 最好僅使用簡單地調用super的vanilla init(coder:) ,並在代碼中或使用IBDesignable屬性配置對象,如上所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM