【问题标题】:Create Instance of Subclass that requires NSCoder创建需要 NSCoder 的子类实例
【发布时间】:2018-10-13 03:36:31
【问题描述】:

我创建了一个 UILabel 的子类,基于此处的示例:UILabel doesn't show 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()
}

}

干杯!

【问题讨论】:

    标签: ios swift uitableview uilabel


    【解决方案1】:

    在您链接到的问题中,初始化函数是initWithCoder,因为它用于从情节提要或笔尖加载视图。你没有这样做。

    因此,将您的 init 更改为“普通”的,例如:

    init() {
        super.init()
    
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多