2015-08-10 3 views
2

Использование Cocoa данных Связывание Я вразумлял кнопка на «включено» свойство двух отдельных «Типовых ключевых Paths» (Enabled и Enabled2).какао Привязка данных - один объект вида, связанный с двумя «включен» свойства

Идея состоит в том, что кнопка будет включена, если либо из этих свойств является истинным.

К сожалению, он работает только в том случае, если станет действительным как.

Может кто поможет мне изменить эту логику от И до ИЛИ?

+0

Я не думаю, что Boole позволяет нам использовать NSNegateBoolean value transformer, чтобы получить то, что вам нужно, потому что AND запекается в привязках NSButton. Таким образом, вам может потребоваться создать свойство readonly с зависимыми ключевыми путями, которые возвращают OR, и связываться с этим. – stevesliva

ответ

0

Прохладный вопрос. Я собираюсь сделать снимок в темноте, я не могу подтвердить его для вас до завтра, но попробуйте это, может быть?

Создайте новый объект, enabledOrEnabled2 (возможно, с лучшим именем).
Override сорбент (-(BOOL)enabledOrEnabled2) для этого свойства
просто вернуться (Enabled || Enabled2)

Установите ключ Путь быть enabledOrEnabled2

Я немного скептически, если это будет работать, потому что какао привязок работу с помощью KVC и КВО. Поэтому atm, ваш контроллер просмотра наблюдает ваши Enabled и Enabled2. Что происходит во время выполнения, так это то, что Cocoa переопределит ваши свойства с собственными свойствами KVO, которые выглядят и действуют так же, как вы думаете. За исключением того, что сеттеры были отменены, для отправки уведомлений наблюдателям.

Я думаю, что проблема с моим решением заключается в том, что -(void)setEnabledOrEnabled2 никогда не будет вызван, потому что вы будете устанавливать только свои и Enabled2. Поэтому какао переопределены -(void)setEnabledOrEnabled2 никогда не уведомит ваши наблюдения View Controller

EDIT: Просто прочитайте @ комментарий stevesilva, и даже не знал, что dependent keys была вещь. Похоже, вы могли бы определенно реализовать это таким образом, если вы хотите

На самом деле, первый размышлению хак будет переключаться на переопределение поглотитель (как я первый рекомендуется), и вместо того, чтобы переопределить сеттеры: -(void)setEnabled и -(void)setEnabled2, и добавьте строку, что-то вроде: _enabledOrEnabled2 = _Enabled || _Enabled2. Таким образом, когда вы установили два свойства BOOL, он обновит enabledOrEnabled2, после чего отправит уведомление своему наблюдателю, вашему контроллеру.

Но теперь, когда я это написал, мне было интересно узнать о второй части Cocoa Bindings, KVC, чтобы модифицировать модель всякий раз, когда вид видит изменения.

И поскольку вы на самом деле используете привязки в состоянии Enabled - я действительно не думаю, что вы должны использовать Bindings. Это связано с тем, что представление фактически не может быть изменено (т. Е. Вы не можете изменить состояние кнопки enabled). Таким образом, вам никогда не понадобится использовать KVC для изменения enabledOrEnabled2, вам нужна только ваша кнопка, чтобы наблюдать за BOOLs, чтобы узнать, нужно ли ее включить или нет.

Так лом все, что я сказал thusfar--
Что вы должны сделать еще модифицировать сеттер (-(void)setEnabled и -(void)setEnabled2), и перед установкой Ивара следует добавить строку:
[self.button setEnabled:(_Enabled || _Enabled2)];

Это должны сделать трюк для йа :)

Извините за бессвязный немного, я чувствую, что информация, которую я написал вначале может быть полезным, поэтому я решил не удалять его

+0

Спасибо за отзыв, Стив и Мэтти. В конце концов я решил это, создав свойство только для включенного состояния кнопки, а затем поместил логику относительно того, когда это будет установлено в коде View Controller. Это означало создание дополнительной собственности, но упрощало ситуацию. – Sparked

+0

Не проблема :) Если вы не возражаете, можете ли вы редактировать свой код? Я хотел бы посмотреть, что сработало для вас –

+0

@MattyAyOh - с зависимыми ключевыми путями, это два однострочных метода ... getter для свойства ORed и метод для регистрации зависимых ключей. Чтобы сутулиться [собственный ответ] (http://stackoverflow.com/questions/24463979/itunes-like-count-buttons-using-cocoa-bindings/24471002#24471002), это фантастически скользкий способ избежать регистрации наблюдателей. – stevesliva

 Смежные вопросы

  • Нет связанных вопросов^_^