Привязки какао и пользовательские свойства NSCell - PullRequest
3 голосов
/ 28 марта 2011

У меня проблема с подклассами NSCells (ячейки с флажками). Я хочу, чтобы они имели заголовок и подзаголовок рядом с флажком (поэтому я создал свойства NSString для них). Их значения должны быть установлены через Bindings (от IB было бы здорово), но тут возникает проблема:

IB только позволяет мне устанавливать «значение» ячеек, в моем случае это BOOL для состояния галочки.

Какой класс должен быть связан с NSArrayController, который обслуживает данные? Кажется, что сами клетки не могут быть привязаны ни к чему и делают что-то вроде

[self.subtitle bind:...]

тоже не работает. Где и когда я должен делать переплет?

Бест, Стефан

1 Ответ

0 голосов
/ 05 декабря 2012

Я собираюсь предположить, что вы делаете это в NSTableView на основе ячеек, потому что NSButtonCell предоставляет привязку title, но это бесполезно в контексте NSTableView, потому что вы должны связать NSTableColumn, и , что предоставляет только привязку значения для NSTableColumns, содержащую NSButtonCells. Это недостаток фреймворка, и Google показывает, что с этим столкнулись многие.

Один из подходов к этому - обновить заголовок модели в ваших методах делегатов -tableView:dataCellForTableColumn:row: и -tableView:willDisplayCell:forTableColumn:row:. Недостатком этого является отсутствие обновления через KVO при изменении базовой модели. Если это важно для вашего приложения, один из обходных путей - сделать keyPath модели для value флажка зависимым от keyPath модели для title флажка. Таким образом, при изменении заголовка KVO будет отправлять уведомления об изменении значения, что приведет к перерисовке строки, и, следовательно, заголовок будет обновлен методом делегата.

Я заметил, что этот вопрос старый, но в наши дни более простым подходом было бы использовать NSTableView на основе NSView. После этого вы работаете с первоклассным элементом управления NSButton с доступными привязками Value и Title (и кучей других). Часто это более работоспособный подход, при условии, что вы не беспокоитесь о поддержке версии ОС до Lion.

...