gpt4 book ai didi

ios - 创建需要 NSCoder 的子类实例

转载 作者:行者123 更新时间:2023-11-28 07:49:06 25 4
gpt4 key购买 nike

我基于此处的示例创建了 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()
}

}

干杯!

最佳答案

在您链接到的问题中,初始化函数是 initWithCoder 因为它用于从 Storyboard或 Nib 加载 View 。你没有那样做。

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

init() {
super.init()

...
}

关于ios - 创建需要 NSCoder 的子类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com