#objective-c #cocoa #nswindow #growl
#objective-c #cocoa #nswindow #рычание
Вопрос:
Я пишу систему уведомлений, похожую на growl. Уведомление представляет собой окно, и его уровень установлен на NSModalPanelWindowLevel. Единственная проблема в том, что у меня есть кнопка в этом окне, и когда пользователь хочет нажать эту кнопку, он / она должен нажать ее дважды. Но, например, в growl, независимо от того, какое окно вы открыли, вы просто нажимаете на уведомление, и оно регистрирует щелчок. Так это проблема уровня? Если да, то на что мне следует его установить? Спасибо
Комментарии:
1. Если это вообще возможно, пожалуйста, не дублируйте Growl. Пользователи, у которых Growl уже установлен и у которых есть несколько приложений, использующих его, не поблагодарят вас за создание еще одного окна уведомлений, чтобы скрыть все, что они уже видели.
2. Моя цель не в том, чтобы дублировать growl… Я просто не хочу, чтобы мои пользователи зависели от growl, и это ТОЛЬКО для моего приложения. Я люблю Growl, и у меня нет причин дублировать его…
3. Конечно, но, пожалуйста, убедитесь, что для пользователей с установленным Growl вы используете его, а не размещаете дополнительные всплывающие окна, похожие на Growl, на дисплее. В противном случае вы заблокируете уведомления из Growl своим уведомлением (и, возможно, наоборот).
Ответ №1:
В ваших пользовательских элементах управления, которые составляют содержимое просмотра окна, вы, вероятно, захотите переопределить NSView
-acceptsFirstMouse:
метод для возврата YES
:
Обсуждение
Получатель может либо безоговорочно вернуть значение, либо использовать местоположение
theEvent
, чтобы определить, хочет ли он событие. Реализация по умолчанию игнорируетtheEvent
и возвращаетNO
.Переопределите этот метод в подклассе, чтобы экземпляры могли реагировать на переход по ссылке. Это позволяет пользователю щелкнуть по представлению в неактивном окне, активируя представление одним щелчком мыши, вместо того, чтобы сначала щелкнуть, чтобы сделать окно активным, а затем щелкнуть представление. Большинство объектов просмотра отказываются от попытки перехода по ссылке, поэтому событие просто активирует окно. Однако многие объекты управления, такие как экземпляры
NSButton
иNSSlider
, принимают их, поэтому пользователь может немедленно управлять элементом управления, не отпуская кнопку мыши.
Ответ №2:
Не уверен, что Growl делает именно это, но вы могли бы прослушивать события наведения курсора мыши в окне и использовать их для активации / деактивации окна до щелчка. Я подозреваю, что ваша проблема заключается в том, что первый щелчок поглощается активацией окна.
Хотя это просто предположение.
Чтобы узнать, как обрабатывать события наведения курсора мыши, ознакомьтесь с этой документацией: