如何使 NSMenuItem 中的自定义 NSView 成为 FirstResponder?
How to make a custom NSView within a NSMenuItem becomeFirstResponder?
我在 NSMenuItem(附加到 MenuBar)中有一个响应 mouseDown 事件的自定义 NSView。但是我需要在自定义视图上单击两次才能调用 mouseDown 函数,这是因为自定义视图应该是第一响应者。当我按照 Cocoa 事件处理指南的指示在我的 CustomView 控制器中覆盖方法 acceptsFirstResponder 时,它不起作用。解决办法是什么?可行吗?
为相关事件覆盖 NSView
方法 acceptsFirstMouse:
到 return YES
。如果您只想接受某些类型事件的第一次鼠标单击,您可以通过检查传入的事件参数来实现。除非 NSMenuItem 的情况特别特殊,否则这应该是您想要的;这是标准的 Cocoa 机制。注意这个方法和你试过的acceptsFirstResponder
方法不一样。有关详细信息,请参阅 Apple 文档。
作为参考,我刚刚在我的自定义视图中添加了以下内容:
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent {
return YES;
}
我在 NSMenuItem(附加到 MenuBar)中有一个响应 mouseDown 事件的自定义 NSView。但是我需要在自定义视图上单击两次才能调用 mouseDown 函数,这是因为自定义视图应该是第一响应者。当我按照 Cocoa 事件处理指南的指示在我的 CustomView 控制器中覆盖方法 acceptsFirstResponder 时,它不起作用。解决办法是什么?可行吗?
为相关事件覆盖 NSView
方法 acceptsFirstMouse:
到 return YES
。如果您只想接受某些类型事件的第一次鼠标单击,您可以通过检查传入的事件参数来实现。除非 NSMenuItem 的情况特别特殊,否则这应该是您想要的;这是标准的 Cocoa 机制。注意这个方法和你试过的acceptsFirstResponder
方法不一样。有关详细信息,请参阅 Apple 文档。
作为参考,我刚刚在我的自定义视图中添加了以下内容:
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent {
return YES;
}