0

我的窗口上有一个按钮,该按钮在界面生成器中设置为具有等效于 enter 的键,但是在将内容视图从使用 IKImageBrowserView 切换到 NSCollectionView 后,keyEquivalent 将被忽略。

根据文档中的说明:http: //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW10

keyEquivalent 事件被“特殊”处理,应该非常简单。

我正在对 NSCollectionViewItem 和项目视图进行子类化,但是当我覆盖该方法时,这些子类都没有获得 performKeyEquivalent:theEvent。

默认按钮旁边有一个取消按钮,并映射到 esacpe 键。取消继续起作用,但默认按钮不起作用。

我怎样才能知道在哪里处理输入键事件?

编辑:

实际上,我在用于了解 NSCollectionView 的示例应用程序中发现了相同的问题。我在窗口底部添加了一个默认按钮,发现return没有触发按钮但enter(fn + return)确实触发了按钮。

来自 Apple 的 IconCollection 示例应用程序

关于在这个例子中窃取返回键事件的任何想法?

编辑:

我在这里发布了一个示例项目:https ://github.com/watkyn/NSCollectionViewIssue 。为什么默认按钮不起作用?

4

1 回答 1

3

Return并且Enter是两个不同的键。Return(在美式键盘上)位于撇号键的右侧。Enter是键盘右下角的键。如果您使用的是没有数字键盘的笔记本电脑,请Enterfn+ 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]before [[self window] keyDown:theEvent]

于 2011-09-23T16:48:28.987 回答