Я уже убил день на эту тему и до сих пор не знаю, как это можно сделать правильно.
Я использую NSOutlineView
для отображения иерархии файловой системы. Для каждой строки в первом столбце мне нужно отобразить флажок, связанный значок и имя файла или каталога. Поскольку не существует стандартного способа сделать это, я подкласс NSTextFieldCell
, используя оба примера SourceView и PhotoSearch, привязывая value
в IB к name
свойству моего класса элементов дерева, хотя NSTreeController
. Я использую drawWithFrame:inView:
переопределить, чтобы закрасить флажок и изображение, перенаправляя рисунок текста на super
Я также использую trackMouse:inRect:ofView:untilMouseUp:
переопределение для обработки взаимодействия с флажками.
Все было хорошо, пока я не заметил, что, как только я нажимаю кнопку мыши внутри своей пользовательской ячейки, объект ячейки копируется с помощью copyWithZone:
, и этот временный объект затем отправляется сообщение trackMouse:inRect:ofView:untilMouseUp:
, что делает невозможным изменение проверить состояние исходной ячейки, находящейся в представлении.
Поскольку предмет вопроса касается связывания, я подумал, что это может быть ответом, но я совершенно не понимаю, как мне связать весь этот беспорядок, чтобы функционировать, как ожидалось. Пробовал это:
[[[treeView outlineTableColumn] dataCell] bind:@"state"
toObject:treeController
withKeyPath:@"selection.state"
options:nil];
но не удалось вообще. Похоже, я не понимаю.
Может быть, это совершенно неверный путь, которым я воспользовался? Не могли бы вы предложить лучшую альтернативу или какие-либо ссылки для дальнейшего чтения?
UPD 1/21/11 : я тоже пробовал это:
[[[treeView outlineTableColumn] dataCell] bind:@"state"
toObject:treeController
withKeyPath:@"arrangedObjects.state"
options:nil];
, но продолжал получать ошибки, такие как «[<_NSControllerTreeProxy 0x ...> valueForUndefinedKey:]: этот класс не совместим со значением ключа для кодирования состояния ключа». и аналогичные.