簡體   English   中英

創建需要NSCoder的子類的實例

[英]Create Instance of Subclass that requires NSCoder

我基於以下示例創建了UILabel的子類: UILabel不顯示inputView 我正在嘗試在UITableViewCell的子類中創建標簽的實例。 我遇到的問題是要創建DatePickerLabel的實例,它需要一個NSCoder。

let dp = DatePickerLabel(coder: NSCoder) 

我在類中繼承了UITableViewCell的類,但似乎從未觸發過它,因此在運行它時會導致返回空指針(我嘗試使用變量,然后在此代碼內分配它):

required public init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    print("triggered")
}

任何幫助將不勝感激,下面顯示的DatePickerLabel!

class DatePickerLabel: UILabel {

private let _inputView: UIView? = {
    let picker = UIDatePicker()
    return picker
}()

private let _inputAccessoryToolbar: UIToolbar = {
    let toolBar = UIToolbar()
    toolBar.barStyle = UIBarStyle.default
    toolBar.isTranslucent = true
    toolBar.sizeToFit()
    return toolBar
}()

override var inputView: UIView? {
    return _inputView
}

override var inputAccessoryView: UIView? {
    return _inputAccessoryToolbar
}

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

    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(doneClick))
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)

    _inputAccessoryToolbar.setItems([ spaceButton, doneButton], animated: false)

    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(launchPicker))
    self.addGestureRecognizer(tapRecognizer)
}

override var canBecomeFirstResponder: Bool {
    return true
}

@objc private func launchPicker() {
    becomeFirstResponder()
}

@objc private func doneClick() {
    resignFirstResponder()
}

}

干杯!

在您鏈接的問題中,初始化函數是initWithCoder因為它用於從故事板或筆尖加載視圖。 你沒有那樣做。

因此,將您的init更改為“普通”的,例如:

init() {
    super.init()

    ...
}

暫無
暫無

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

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