【发布时间】:2017-07-05 18:19:26
【问题描述】:
请不要标记为重复。可用的答案还没有回答我的问题。
我使用UIDatePicker 作为UITextField's inputView(在UITableViewCell 内):
@IBOutlet weak var theTextField: UITextField!
func textFieldDidBeginEditing(_ textField: UITextField) {
let picker = UIDatePicker()
picker.setValue(Colors.CI2, forKeyPath: "textColor")
picker.datePickerMode = .date
textField.inputView = picker
textField.inputView?.backgroundColor = Colors.CI1 // my desired color
picker.addTarget(self, action: #selector(datePickerValueChanged), for: .valueChanged)
}
问题:颜色只会在第二次调用选取器时发生变化。
我猜,出现这个问题是因为 inputView 是可选的,并且只有在第二次调用选择器时,inputView 才会在我想更改颜色的那一刻被实例化。
我尝试继承 UITextField 并观察 inputView。
class DateTextField: UITextField {
override var inputView: UIView? {
didSet {
self.inputView?.backgroundColor = Colors.CI1
self.reloadInputViews()
}
}
}
很遗憾没有成功。相同的行为。我错过了什么?非常感谢您的帮助。
【问题讨论】:
-
我在应用程序中有类似的功能,但我在
viewDidLoad中定义了选择器,然后稍后再引用它。使用这种方法,backgroundColor更改对我来说没有问题。此外,在inputView更改之前,您的didSet不会被调用,因此这也可能导致您的问题。根据 Apple,“首次初始化属性时不会调用 willSet 和 didSet 观察者。仅当属性的值在初始化上下文之外设置时才会调用它们。” -
textField 是 UITableViewCell 的一部分。因此 viewDidLoad 不会生效。抱歉,如果这会影响您的回答
-
你应该仍然可以提前定义它,也许不是在
viewDidLoad,而是在另一个地方。另外,请参阅我评论的第二部分,我不会尝试在didSet中设置 bg 颜色 -
我得到了你的第二部分。但是这个解决方案无论如何都是表格的,因为它不起作用。这只是第一个猜测的选项
-
对不起,我不太明白你的评论。
标签: ios swift uitextfield uidatepicker