如何制作键盘快捷键以关闭Xcode / Interface Builder的对话框?

时间:2009-06-27 04:35:38

标签: cocoa interface-builder keyboard-shortcuts

这似乎非常基本但是这里。如果你是面向键盘的,你习惯于在OS X中一直使用Command-W关闭窗口。我想将这个功能添加到我在Interface Builder中为我的程序创建的对话框中。我可以看到如何添加一个等效于按钮动作的键盘,但如果我没有按钮怎么办?

我应该添加一个隐形按钮并将快捷方式放在那里吗?看起来很笨拙。当然,只有一些我可以覆盖的方法,但到目前为止我所尝试的方法都没有用。

4 个答案:

答案 0 :(得分:8)

当您按命令 + W 时,它与从菜单栏中选择File -> Close完全相同。 Close做的是向第一响应者发送performClose:消息。反过来,它将检查接收者或接收者的委托是否实现windowShouldClose:,如果窗口返回YES,窗口将关闭(否则,它将调用close方法)。

所以,这取决于你在这里得到的对话类型。如果它是非模态的(基本上,如果你可以在运行时访问菜单栏)并且是NSWindow的实例或子类,那么你需要做的就是覆盖对话框中的windowShouldClose:方法delegate(或您的对话框类,如果您将NSWindow或其他内容子类化)并使其返回YES

但是,如果对话框是模态对话框(在对话框运行时无法访问菜单栏,切换窗口等),那么你不能这样做。你可以添加一个隐形按钮,但是老实说,不应该通过点击Command-W来关闭模态对话框,因为这肯定违反了某些Apple接口指南。 (特别是因为正如Ande所指出的那样, Esc 关闭/取消对话是标准做法。)

答案 1 :(得分:2)

添加隐形按钮效果很好。

答案 2 :(得分:1)

对话框是NSWindow吗?因为默认情况下,File->Close菜单选项设置为第一响应者的performClose:操作,并已连接到command-w

如果对话框不是窗口,只需让对话框成为第一响应者并执行performClose:操作。

答案 3 :(得分:0)

你为什么不试试这个:

-(void)keyDown:(NSEvent *)theEvent{

    //If the key is X or x it just closes the window
    if ([theEvent.characters.uppercaseString isEqualToString:@"X"]) {
        [self.window performClose:self];
    }

}

或者如果你想显示一个窗口,你可以实现并在那里显示它而不是performClose