2009-09-18 3 views
1

Я пишу приложение Cocoa, которое отображает содержимое архивного файла в NSOutlineView. Я предоставляю пользовательские значки для NSBrowserCell в контурном столбце, но мне не удалось получить интервал совершенно прав - значок папки всегда оказывается слишком близко к треугольнику раскрытия, как показано ниже. (FWIW, Versions и BetterZip как отображать аналогичные данные без проблем распорных.)Увеличьте слишком плотное расстояние между значками в NSOutlineView

NSOutlineView-icon-spacing http://img.skitch.com/20090918-tgfjh9x8dhgqxqnb2su8fby4ng.jpg

Поскольку только иконки папок будут иметь эту проблему, я действительно только заботиться о фиксации расстояния в этом контексте. (ПРИМЕЧАНИЕ. Я уже кэширую значки для повторного использования, поэтому у меня нет проблем с манипулированием изображением папки, если это необходимо, поскольку это произойдет только в любом случае.) Я не уверен, есть ли что-то, что я могу настроить в экземпляре NSBrowserCell , но я еще не нашел ничего, что работает, а не из-за отсутствия попыток.


Для любознательных, JarScan удобный (бесплатно) инструмент командной строки для размещения классов Java в JAR-файлов.

ответ

3

«Столбец таблицы контуров» (см. -[NSOutlineView outlineTableColumn]) - это NSTableColumn, который рисует треугольник и левое заполнение по мере необходимости для отображения иерархии. Ячейкой по умолчанию для отображения содержимого таблицы является NSTextFieldCell. Чтобы увеличить интервал, который вы видите, вы должны сделать чертеж в пользовательском подклассе NSTextFieldCell. Интервал достигается путем рисования изображения с смещением x. (Контурное изображение будет отображать треугольник раскрытия независимо от того, какой подкласс NSCell используется.)

Обратите внимание, что вам может потребоваться переопределить следующие методы, чтобы правильно рисовать, когда ячейку можно ввести, выбранную для редактирования, и всплывающую подсказку :

По умолчанию у наши пользовательские текстовые прямоугольники будут игнорироваться текстовым полем, и они будут рисоваться странно.

+1

Спасибо, хорошее предложение. Я нашел идею использовать NSBrowserCell на CocoaDev.com и не рассматривал этот подход. К счастью, быстрый поиск показал Apple ** ImageBackground ** образец кода http://developer.apple.com/mac/library/samplecode/ImageBackground/ и, в частности, файл 'ImageAndTextCell.m'. Он реализует все, кроме всплывающей подсказки (которая мне сейчас не нужна), и обрабатывает некоторые странные модели поведения чертежей, о которых я бы не подумал. Джекпот и ура для повторного использования кода! –

+0

BTW, я добавил этот вывод в http://cocoadev.com/index.pl?IconAndTextInTableCell. –