繁体   English   中英

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

[英]How to make a keyboard shortcut to close dialog with Xcode/Interface Builder?

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

我应该添加一个不可见的按钮并将快捷方式放在上面吗? 看起来很笨重。 当然,我可以覆盖一些方法,但到目前为止我尝试过的方法不起作用。

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

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

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

添加隐形按钮效果很好。

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

如果对话框不是窗口,只需使对话框成为第一个响应者并实现performClose: action。

你为什么不试试这个:

-(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

Jasper 关于代码部分是对的。 对于界面构建器(故事板),有一个快速修复:

  1. 在你的故事板中,点击“CMD+Shift+L”调出组件库,选择文件菜单项。

在此处输入图像描述

  1. 将文件菜单项添加到应用程序场景的主菜单节点。 (删除不需要的文件菜单)

在此处输入图像描述

现在你有一个键盘快捷键来关闭一个窗口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM