Динамически заполненное меню NSPopUpButtonCell в NSOutlineView - PullRequest
1 голос
/ 24 апреля 2010

Я работаю с NSOutlineView, который имеет два столбца. My dataSource предоставляет представление структуры с деревом элементов пользовательского класса, который представляет типы файлов (то есть вы инициализируете его с помощью UTI). Первый столбец - это отображаемое имя типа файла (например, «Исходный код», «Документ Interface Builder NIB» и т. Д.). Второй столбец - это NSPopUpButtonCell, который должен позволить пользователю выбрать обработчик для данного типа документа (подумайте о панели предпочтений Xcode «Типы файлов», и вы в значительной степени там).

Я могу сгенерировать NSMenu для данного элемента в дереве, заполненного параметрами, основанными на записях базы данных Launch Services для UTI, с соответствующим значком приложения и так далее. На самом деле, само меню прекрасно работает, заполняясь NSPopUpButtonCellWillPopUpNotification.

Проблема в том, что, как я мог бы попытаться, ячейка, когда всплывающее меню не всегда содержит точно одну из двух вещей: либо пустую строку, либо текст по умолчанию для ячейки, первый, если результат -handlerName для элемента (атрибут, назначенный столбцу) не равен nil, последний - в противном случае.

Более того, я вручную вызываю -selectItem: на экземпляре NSPopUpButtonCell, что кажется неправильным. Напротив, в левом столбце, который является просто NSTextFieldCell, все просто работает (хотя и предоставлено, все, что ему нужно сделать, это прочитать значение из элемента и представить его).

(Отказ от ответственности: я довольно новичок в какао-интерфейсе; я знаю Objective-C и много других языков программирования, но у меня нет большого опыта создания интерфейсов для Mac OS X, так что будьте осторожны) .

1 Ответ

1 голос
/ 05 апреля 2011

Поскольку я также борюсь с outlineViews и popUpButtons, мне бы очень хотелось узнать ответ на этот и многие другие вопросы. Боюсь, я не могу вам помочь, но одна вещь привлекла мое внимание:

Я могу сгенерировать NSMenu для данного элемента в дереве

За последние извилистые недели я узнал одну вещь: при работе с NSTreeController и источником данных всегда предоставляйте NSTreeNodes, устанавливающие ваш реальный объект (в данном случае NSMenu) в качестве представленного объекта.

...