Я пытаюсь реализовать класс как NSResponder
в C ++, на вещи, которые я не понимаю, это:
Все взаимодействия с клавиатурой и мышью отправляются первому респонденту, поэтому, если, например, NSTextField является первым респондентом, как другой NSButton
в том же виде знаете, что это было нажата? Если текстовое поле не хочет щелкать мышью, оно отправляет его своему суперпредставлению, а его суперпредставление отправляет его в контроллер представления. Таким образом, событие, вызываемое мышью, никогда не достигает кнопки.
Это, вероятно, довольно очевидно, но я не могу обернуть это вокруг головы в данный момент.
Все взаимодействия клавиатуры и мыши отправляются первому респонденту
Это неверно От Руководство по обработке событий какао:
Объект окна … отправляет большинство событий объекту NSView
связанный с действием пользователя в сообщении NSResponder, таком как
mouseDown: или keyDown :. …Объект, получающий сообщение о событии, немного отличается по типу
событие. Для событий мыши и планшета объект NSWindow отправляет
событие для просмотра, над которым пользователь нажал мышь или стилус
кнопка. Он отправляет большинство ключевых событий первому респонденту
ключевое окно.
Это различие между путями мыши и ключевых событий повторяется в соответствующих разделах, относящихся к этим типам событий.
Кнопка «знает», когда на нее нажимали, потому что она была нажата. Окно выясняет, что было под курсором мыши, используя -[NSView hitTest:]
метод.