Ссылки в NSTableView NSCell - PullRequest
       19

Ссылки в NSTableView NSCell

3 голосов
/ 05 октября 2010

Я читал и экспериментировал с разрешением ссылок в специально отрисованном NSCell в течение последних нескольких дней, и в принципе у меня не было ничего полезного, всегда есть проблемы с каждым подходом.

Кто-нибудь знает способ сделать это, что работает?

Я настраиваю рисование NSCell, используя - (void) drawInteriorWithFrame: (NSRect) theCellFrame inView: (NSView *) theControlViewm

NSCell - это просто блок текста переменной высоты со ссылками внутри, некоторые ячейки имеют ссылки, а некоторые нет.

Я пытался использовать nsattributedstring с NSLinkAttributeName

Я пытался перехватить все попадания в ячейку, а затем пытался сопоставить, где они нажимали, где будет ссылка в тексте, но это никогда не получается.

Я в основном перепробовал все предложения, которые мог найти на всех досках, но большинство комментариев старые, поэтому я надеюсь, что кто-то нашел хороший способ сделать это.

Спасибо, Дэвид

1 Ответ

0 голосов
/ 10 января 2011

Я не пробовал это точно, но попробую:

Во-первых, для гиперссылок я использую категорию на NSAttributedString, похожую на эту публикацию от разработчиков Apple.В приведенном здесь примере показан метод для NSAttributedString 'hyperlinkFromString: withURL: `

Во-вторых, создайте делегат для таблицы и реализуйте метод tableView:willDisplayCell:forTableColumn:row:.

В этом методе

setAttributedStringValue:[NSAttributedString hyperlinkFromString:YOUR_STRING withURL:YOUR_URL]

или, если вам также необходим текст строки без гиперссылок,

setAttributedStringValue:[SOME_NON_HYPERLINKED_STRING appendAttributedString:[NSAttributedString hyperlinkFromString:YOUR_STRING withURL:YOUR_URL]]

Если это единственная причина, по которой вы выполняете нестандартное рисованиеNSCell, вы можете попробовать избавиться от своего пользовательского класса, потому что это должно работать с NSTextFieldCell.Однако в Интернете я видел, что у некоторых людей возникают проблемы с центрированием приписываемых строк в ячейках текстового поля, поэтому я надеюсь, что это работает нормально.Еще одно предостережение: при использовании метода делегата убедитесь, что вы устанавливаете атрибут ячейки, который вы изменяете для всех условий.Я цитирую:

Поскольку aCell используется повторно для каждой строки в aTableColumn, делегат должен установить атрибуты отображения как при рисовании специальных ячеек, так и при рисовании обычных ячеек.

из"http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSTableViewDelegate_Protocol/Reference/Reference.html" (извините, StackOverflow не позволяет мне публиковать более одной гиперссылки)

Надеюсь, это поможет.

...