Я работаю над существующим проектом Swift / Objective-C на Mac и создаю некоторый пользовательский интерфейс в коде. Я включаю кнопку на основе выбора в NSTableView, которым я управляю без , используя NSArrayController (по причинам).
У меня есть свойство selectionIndexes
на MyController
:
@objc var selectionIndexes : IndexSet = IndexSet()
Я не уверен, нужен ли @objc
, чтобы сделать его видимым для системы привязки Какао.
Я подключаю привязку кнопки enabled
, используя:
newButton.bind(NSBindingName.enabled, to: MyController.sharedInstance,
withKeyPath: "selectionIndexes",
options: [NSBindingOption.valueTransformer : MyTransformer()])
Это работает нормально, преобразователь вызывается с правильным свойством, и значение «enable» установлено правильно, , но изменения в выборе не вызывают привязку , поэтому кнопка остается отключенной.
Мне пришлось явно сказать системе, что я меняю значение, например,
self.willChangeValue(for: \.selectionIndexes )
self.selectionIndexes = proposedSelectionIndexes
self.didChangeValue(for: \.selectionIndexes)
Это выглядит довольно отстойно. Есть ли лучший способ сделать это?