1

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

4

1 回答 1

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";
    });
}
于 2015-01-19T15:05:01.807 回答