我的窗口上有一个按钮,它在界面构建器中设置为具有等效于Enter的键,但在将内容视图从使用IKImageBrowserView切换到NSCollectionView之后,keyEquivalent被忽略。
keyEquivalent事件处理“特殊”,应该非常直接。
我正在继承NSCollectionViewItem和项目的视图,但是当我覆盖该方法时,这些子类都没有获得performKeyEquivalent:theEvent。
默认按钮旁边有一个取消按钮,并被映射到esacpe键。取消继续有效,但默认按钮不起作用。
如何判断输入键事件的处理位置?
编辑:
我实际上在以前学习NSCollectionView的示例应用程序中发现了同样的问题。我在窗口底部添加了一个默认按钮,发现返回没有触发按钮,但输入(fn + return)确实触发了按钮。
IconCollection sample app from Apple
关于在这个例子中窃取返回键事件的任何想法?
编辑:
我在这里发布了一个示例项目:https://github.com/watkyn/NSCollectionViewIssue。为什么默认按钮不起作用?
答案 0 :(得分:3)
Return
和Enter
是两个不同的键。 Return
(在美国键盘上)位于撇号键的右侧。 Enter
是键盘上的右下方键。如果您使用的是没有数字小键盘的笔记本电脑,则按Enter
+ fn
即可获得Return
。
在发布示例代码后进行编辑
MyCollectionView
正在吸收返回/输入击键,而不是将其传递给响应者链。将其添加到MyCollectionView
的实现中并返回并输入将按下按钮:
- (void)keyDown:(NSEvent *)theEvent {
// NSLog(@"event: %@", theEvent);
if (36 == theEvent.keyCode || 76 == theEvent.keyCode) {
//pass return and enter up the responder chain
[[self window] keyDown:theEvent];
}
else {
//process all other keys in the default manner
[super keyDown:theEvent];
}
}
如果您需要MyControllerView以返回/输入实际执行某些操作,这可能会导致问题。在这种情况下,您可以在[super keyDown:theEvent]
之前添加[[self window] keyDown:theEvent]
。