由于UIDatePicker没有回调事件,所以不能通过回调获得date值的实时变化。
对于一些需要实时监控其date值的场景,可以通过以下方法实现实时监控:
override init(frame: CGRect) {
super.init(frame: frame)
...
let datePicker = UIDatePicker(frame: pickerFrame)
datePicker.addTarget(self, action: #selector(datePickerValueChange(_ :)), for: UIControlEvents.valueChanged)
}
@objc func datePickerValueChange(_ picker: UIDatePicker) {
debugPrint("datePickerValueChange........")
if let dateStr = JKTools.stringFromDate(picker.date, format: "yyyy-MM-dd") {
date_label.text = dateStr
}
}
需要注意的是,不能通过KVO来监控date值的变化。以下方式不能得到响应:
override init(frame: CGRect) {
super.init(frame: frame)
...
datePicker.addObserver(self, forKeyPath: "date", options: .new, context: &dpContext)
}
deinit {
datePicker.removeObserver(self, forKeyPath: "date", context: &dpContext)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
debugPrint("observeValue........")//没有执行
}
网友评论