Уведомление о рычании на уровне nswindow

#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 делает именно это, но вы могли бы прослушивать события наведения курсора мыши в окне и использовать их для активации / деактивации окна до щелчка. Я подозреваю, что ваша проблема заключается в том, что первый щелчок поглощается активацией окна.

Хотя это просто предположение.

Чтобы узнать, как обрабатывать события наведения курсора мыши, ознакомьтесь с этой документацией:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/TrackingAreaObjects/TrackingAreaObjects.html