Изменение подсказок в пользовательском представлении - PullRequest
3 голосов
/ 22 марта 2011

У меня есть пример проекта по адресу:

http://ericgorr.net/cocoadev/tooltip.zip

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

Есть ли способ сделать это?Есть ли способ заставить его скрыть текущую подсказку и отобразить новую при вызове view: stringForToolTip: point: userData:?

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

1 Ответ

2 голосов
/ 23 марта 2011

Проверьте пример проекта MAAttachedWindow:
http://mattgemmell.com/source/
Отличное начало для создания пользовательских подсказок.

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

- (void)mouseMove:(NSEvent *)theEvent {

    NSPoint mousePositionInWindow = [theEvent locationInWindow];

}

- (void)mouseDown:(NSEvent *)theEvent {

}

- (void)mouseDragged:(NSEvent *)theEvent {

}

- (void)mouseUp:(NSEvent *)theEvent {

}

Ответ на комментарий:

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

Вместо использования отдельного окна вы также можете нарисовать пользовательскую подсказку внутри самого NSView относительно позиции курсора. Вы также можете поместить дополнительный NSView поверх существующего NSView для отображения пользовательских подсказок.

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

Конечно, вы всегда можете показать информацию на ярлыке, расположенном рядом с представлением, что очень легко реализовать. Но это не настоящий ответ на ваш вопрос:)

...