В моем приложении macOS я хочу объединить текстовое с визуальным NSDatePicker. Поэтому я создал собственный NSDatePicker, который показывает всплывающее окно при нажатии.
Текстовое средство выбора связано с переменной с помощью инспектора привязок:
Моя проблема заключается в том, что, хотя текстовое средство выбора обновляется визуально при выборе чего-либо в всплывающем окне, значение привязки (prop_dateTime) не обновляется.
Некоторые подходы, которые я пробовал:
class TextualAndVisualDatePickerElement: NSDatePicker {
[...]
func showPopover(sender: NSDatePicker) {
//using Bond
self.reactive.objectValue.bidirectionalBind(to: visualDatePicker.reactive.objectValue)
//using KVO
visualDatePicker.bind(.value, to: self, withKeyPath: "dateValue", options: [:])
//using setValue
_ = self.reactive.objectValue.observeNext(with: {self.setValue($0, forKey: "dateValue")})
_ = visualDatePicker.reactive.objectValue.observeNext(with: {sender.setValue($0, forKey: "dateValue")})
//using willChange
_ = self.reactive.objectValue.observeNext(with: {visualDatePicker.willChangeValue(forKey: "dateValue"); visualDatePicker.dateValue = $0 as! Date; visualDatePicker.didChangeValue(forKey: "dateValue")})
_ = visualDatePicker.reactive.objectValue.observeNext(with: {self.willChangeValue(forKey: "dateValue"); self.dateValue = $0 as! Date; self.didChangeValue(forKey: "dateValue")})
}
[...]
//using keyPaths
override public class func keyPathsForValuesAffectingValue(forKey key: String) -> Set<String> {
if key == "dateValue" {
return Set(["visualDatePicker.dateValue"])
}
if key == "visualDatePicker.dateValue" {
return Set(["dateValue"])
}
return Set([])
}
}
class ViewController: NSViewController {
@objc dynamic var objectControllerContent : ObjectControllerContent = ObjectControllerContent()
@IBOutlet weak var label: NSTextField!
@IBAction func btnClicked(_ sender: Any) {
label.stringValue = "prop_dateTime is \(objectControllerContent.prop_dateTime)"
}
}
class ObjectControllerContent : NSObject {
@objc dynamic var prop_dateTime : Date?
}
Результат:
GitHub проекта: https://github.com/Florrr/VisualNSDatePicker