NSComboBox - 陷阱返回键

Posted

技术标签:

【中文标题】NSComboBox - 陷阱返回键【英文标题】:NSComboBox - trap return key 【发布时间】:2013-03-04 14:35:56 【问题描述】:

在我的应用程序中,我显示了一个带有 NSComboBox 的工作表。如果用户使用箭头键从菜单中选择一个条目,然后 Return 选择它,则工作表的 OK 按钮也会被操作,因为它具有 Return 作为其等效键。我想停止这些 Return 键充当 OK 点击。 在尝试了很多事情之后(除了子类化 NSComboBox 开始变成一场噩梦)如果组合框是第一响应者并且当前事件是返回键键,我试图忽略 OK 点击,但是 NSPanel sheet 是从始终返回自身作为当前第一响应者的子类。我期待一个字段编辑器,但我得到的只是 NSPanel。 1)有没有更好的方法来做到这一点?用户真的想要基于键盘的数据输入,而不是鼠标。 2)如果这是最好的方法,我怎么知道组合框是第一响应者? 任何帮助都欣然接受。以前肯定处理过吗? 安迪牧师

【问题讨论】:

您是否尝试过让组合框成为第一响应者? 我认为问题在于,虽然组合框的菜单正在显示,但对于第一响应者来说并没有明确的价值——这就是它最终被指向窗口的原因。 可怕的解决方法是记录菜单被关闭的时间(在 comboBoxWillDismiss 中:)并检查调用 OK 按钮选择器的时间 - 如果它们之间的时间少于 0.1 秒,我会忽略 OK . OK 按钮仍然闪烁,但至少一般功能有效。丑陋。 【参考方案1】:

有一个解决方法,它不是很漂亮,但它会起作用:

注册两个通知 NSComboBoxWillPopUpNotificationNSComboBoxWillDismissNotification

- (void)comboBoxWillPopUp:(NSNotification *)notification

    okButton.keyEquivalent = @"";


- (void)comboBoxWillDismiss:(NSNotification *)notification

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0), dispatch_get_main_queue(), ^
        okButton.keyEquivalent = @"\r";
    );

【讨论】:

以上是关于NSComboBox - 陷阱返回键的主要内容,如果未能解决你的问题,请参考以下文章

Android开发如何点击物理返回键返回上个界面

Android中如何点返回键返回主页面,在主页面中点返回键弹出退出框?

android检测返回键onBackPressed和onKeyDown区别

WebView在Fragment中点击返回键返回上一页

手机中的Menu键、Home键、返回键和搜索按键分别是起啥作用的

js怎么监听安卓返回键