Несколько встроенных NSButtonCells в пользовательском элементе управления - PullRequest
0 голосов
/ 20 апреля 2009

Я экспериментирую с созданием настраиваемой области видимости, которая использует объекты NSButtonCell в утопленном стиле. Однако у меня возникают проблемы при рисовании лицевой панели, когда мышь зависает. Я могу заставить его работать, создавая области отслеживания и установив showBorderOnlyWhileMouseInside на NO, когда мышь находится внутри, и YES, когда она выходит наружу, но для меня это похоже на хак, тем более что NSButtonCell будет выполнять отслеживание самостоятельно.

Если я использую метод setCell элемента управления, ячейка кнопки вызовет addTrackingRect: owner: userData: acceptInside: элемента управления и настроит свое собственное отслеживание для рисования панели при наведении курсора мыши. Однако, если я хочу использовать несколько ячеек кнопки в одном и том же элементе управления, я пытаюсь установить controlView каждой ячейки в пользовательский элемент управления, используя метод setControlView для ячейки кнопки, но он не запрашивает ячейку для настройки областей отслеживания, как это делает setCell.

Техника должна быть возможной, поскольку NSMatrix делает это, но после прочтения каждого доступного API и форума я не нашел способа инициировать поведение отслеживания NSButtonCell без использования метода setCell его элемента управления. Мой лоб кровоточит от удара по столу - помощь была бы признательна.

Ответы [ 2 ]

1 голос
/ 19 мая 2009

Я вернулся к этому позже и обнаружил, что если вы изменяете пользовательский подкласс на NSControl вместо NSView, метод addTrackingRect автоматически обрабатывается ячейкой. Просто вызовите методы mouseEntered / mouseExited ячейки, если это необходимо для реализации режима наведения ячейки. Надеюсь, это кому-нибудь поможет.

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

Во-первых, лейкопластырь может быть первым, что может помочь. ;)

Вы пытались использовать NSButtonCell's -updateTrackingAreaWithFrame: inView: метод? Это не задокументировано, но отображается в заголовке NSButtonCell, который класс-дамп генерирует на Leopard. Я не уверен, что официальное слово или общее согласие касаются использования недокументированных методов, которые не начинаются с подчеркивания, поэтому будьте осторожны.

В другом примечании: вы можете вместо использования нескольких buttonCells взглянуть на использование нескольких кнопок в представлении для этой задачи. Моделирование вашего собственного класса после существующего класса, такого как NSMatrix, достойно восхищения, но для сложного поведения, такого как то, что вы ищете, часто более плодотворно немного отклоняться. Концепция, согласно которой использование множества представлений вместо использования одного представления с кучей ячеек является дорогостоящей , все же имеет некоторые достоинства, но если этот путь требует хакерской реализации, я бы пошел другим путем. *

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