我正在尝试在 C++ 中实现一个类NSResponder
,但我不明白的是:
所有键盘/鼠标交互都发送给第一响应者,因此,例如,如果 NSTextField 当前是第一响应者,NSButton
同一视图中的另一个如何知道它已被点击?如果文本字段不希望鼠标单击,它将把它发送到它的超级视图,它的超级视图将它发送到视图控制器。所以鼠标点击事件永远不会到达按钮。
这可能很明显,但我现在无法理解它。
我正在尝试在 C++ 中实现一个类NSResponder
,但我不明白的是:
所有键盘/鼠标交互都发送给第一响应者,因此,例如,如果 NSTextField 当前是第一响应者,NSButton
同一视图中的另一个如何知道它已被点击?如果文本字段不希望鼠标单击,它将把它发送到它的超级视图,它的超级视图将它发送到视图控制器。所以鼠标点击事件永远不会到达按钮。
这可能很明显,但我现在无法理解它。
所有键盘/鼠标交互都发送给第一响应者
这是不正确的。从可可事件处理指南:
window 对象……将大多数事件分派给与 NSResponder 消息中的用户操作相关联的 NSView 对象,例如 mouseDown: 或 keyDown:。…</p>
接收事件消息的对象因事件类型而略有不同。对于鼠标和平板电脑事件,NSWindow 对象将事件分派给用户按下鼠标或触控笔按钮的视图。它将大多数关键事件分派给关键窗口的第一响应者。
鼠标和键事件路径之间的这种区别在特定于这些类型事件的相关部分中重复出现。
一个按钮“知道”它何时被点击,因为它是被点击的东西。-[NSView hitTest:]
窗口使用该方法计算出鼠标光标下的内容。