2013-09-18 5 views
1

Я создаю свой пользовательский NSView при нажатии на определенную кнопку, и я хочу закрыть это пользовательское представление, если ваш клик за пределами NSView. Но, похоже, я не смог получить событие mouseDown в этом пользовательском NSView. Кто-нибудь знает, как это сделать? Большое спасибо.Как я могу обнаружить событие mouseDown вне моего NSView?

ответ

0

Вы хотите использовать глобальный монитор событий NSEvent. Тогда вам может потребоваться преобразовать мышь NSPoint в координаты вашего вида и использовать функцию NSPointInRect, чтобы увидеть, внутри она или нет.

+0

Вы можете пролить некоторый пример кода здесь? –

+0

В руководстве по программированию NSEvent приведен пример кода в документах, показывающих, как это сделать. – uchuugaka

+0

Опубликовать пример кода на github завтра. – uchuugaka

1

Я хотел поделиться двумя другими решениями, которые в отличие от подхода NSEvent не имеют ограничений для песочницы.

Крышка окна. Это более привлекательный код и хорошее упражнение в изучении того, что возможно с окнами и видами. Но стоит учиться и знать.

Создайте окно без полей, которое занимает весь экран. Окно без полей может обрабатывать события мыши.

Район слежения. Этот подход аналогичен

+0

песочница ограничение? – eonist

+0

Вы можете столкнуться с проблемами в песочнице, пытаясь использовать глобальный монитор событий или CGEvent для событий вне вашего приложения. Если вы изолированы. – uchuugaka

+0

Имеет смысл, иначе можно заглянуть в регистраторы ключей/мышей. Вместо этого я использую локальный монитор событий. И затем используйте windowDidResize(), чтобы вызвать щелчок мыши за окном. Я предполагаю, что можно было бы зарегистрировать NsEvent.mouseLocation, когда это событие произойдет, и все равно передать требование к песочнице приложения. – eonist

Смежные вопросы