Я работаю с NSOutlineView
, который имеет два столбца. My dataSource
предоставляет представление структуры с деревом элементов пользовательского класса, который представляет типы файлов (то есть вы инициализируете его с помощью UTI). Первый столбец - это отображаемое имя типа файла (например, «Исходный код», «Документ Interface Builder NIB» и т. Д.). Второй столбец - это NSPopUpButtonCell
, который должен позволить пользователю выбрать обработчик для данного типа документа (подумайте о панели предпочтений Xcode «Типы файлов», и вы в значительной степени там).
Я могу сгенерировать NSMenu
для данного элемента в дереве, заполненного параметрами, основанными на записях базы данных Launch Services для UTI, с соответствующим значком приложения и так далее. На самом деле, само меню прекрасно работает, заполняясь NSPopUpButtonCellWillPopUpNotification
.
Проблема в том, что, как я мог бы попытаться, ячейка, когда всплывающее меню не всегда содержит точно одну из двух вещей: либо пустую строку, либо текст по умолчанию для ячейки, первый, если результат -handlerName
для элемента (атрибут, назначенный столбцу) не равен nil
, последний - в противном случае.
Более того, я вручную вызываю -selectItem:
на экземпляре NSPopUpButtonCell
, что кажется неправильным. Напротив, в левом столбце, который является просто NSTextFieldCell
, все просто работает (хотя и предоставлено, все, что ему нужно сделать, это прочитать значение из элемента и представить его).
(Отказ от ответственности: я довольно новичок в какао-интерфейсе; я знаю Objective-C и много других языков программирования, но у меня нет большого опыта создания интерфейсов для Mac OS X, так что будьте осторожны) .