Избавление от прямоугольного фокуса на NSCell. Отображается только при щелчке правой кнопкой мыши - PullRequest
0 голосов
/ 29 апреля 2009

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

Я пробовал около 15 различных методов, которые, похоже, могли бы дать мне контроль над самим рисованием этого прямоугольного фокуса (различные методы первого респондента, различные методы рисования, различные цветовые методы выделения и т. Д.), Но Мне еще предстоит найти что-то, что что-то изменит в этом.

Скриншот проблемы: http://twitpic.com/3zx2t

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

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 02 мая 2009

Без полного переопределения вашего табличного представления -drawRect: это единственный известный мне способ избавиться от выделенного прямоугольником контекстного меню.

- (void)_drawContextMenuHighlightForIndexes:(NSIndexSet *)rowIndexes clipRect:(NSRect)rect {
    return;
}

Это метод, используемый, по крайней мере, в Leopard, для рисования подсветки вокруг ячеек, которые будут активированы контекстным меню. К сожалению, он вызывается напрямую методом NSTableView -drawRect:, и, насколько я знаю, нет другого способа заявить о вашей незаинтересованности в прорисовке этих бликов.

Конечно, это частный API, он может перестать работать в Snow Leopard или в каком-либо другом выпуске. Но в худшем случае это означает, что где-то по пути подсветка контекстного меню может снова запуститься в ваших программах на более новых выпусках, или некоторые другие функции, использующие этот метод, могут не работать позже. Вы были предупреждены.

0 голосов
/ 30 апреля 2009

В 10.5 и более поздних версиях NSTableView позволяет вызывать контекстное меню для любого элемента в таблице (то есть без побочного эффекта изменения выбора).

Он рисует этот «прямоугольник фокуса», чтобы указать, на какой элемент (элементы) воздействует контекстное меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...