Почему я могу нажать NSButton, если он не первый респондент?

Я пытаюсь реализовать класс как NSResponder в C ++, на вещи, которые я не понимаю, это:

Все взаимодействия с клавиатурой и мышью отправляются первому респонденту, поэтому, если, например, NSTextField является первым респондентом, как другой NSButton в том же виде знаете, что это было нажата? Если текстовое поле не хочет щелкать мышью, оно отправляет его своему суперпредставлению, а его суперпредставление отправляет его в контроллер представления. Таким образом, событие, вызываемое мышью, никогда не достигает кнопки.

Это, вероятно, довольно очевидно, но я не могу обернуть это вокруг головы в данный момент.

0

Решение

Все взаимодействия клавиатуры и мыши отправляются первому респонденту

Это неверно От Руководство по обработке событий какао:

Объект окна … отправляет большинство событий объекту NSView
связанный с действием пользователя в сообщении NSResponder, таком как
mouseDown: или keyDown :. …

Объект, получающий сообщение о событии, немного отличается по типу
событие. Для событий мыши и планшета объект NSWindow отправляет
событие для просмотра, над которым пользователь нажал мышь или стилус
кнопка. Он отправляет большинство ключевых событий первому респонденту
ключевое окно.

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

Кнопка «знает», когда на нее нажимали, потому что она была нажата. Окно выясняет, что было под курсором мыши, используя -[NSView hitTest:] метод.

3

Другие решения


По вопросам рекламы [email protected]