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