Objective c NSComboBox-陷阱返回键

Objective c NSComboBox-陷阱返回键,objective-c,xcode,nscombobox,Objective C,Xcode,Nscombobox,在我的应用程序中,我会显示一张包含NSCOMBOX的工作表。如果用户使用箭头键从菜单中选择一个条目,然后返回以选择该条目,则工作表的“确定”按钮也会被操作,因为它将返回作为其等效键。我想停止这些返回键作为OK点击。 在尝试了很多事情之后(除了子类化NSComboBox开始变成噩梦之外),如果组合框是第一个响应者,并且当前事件是一个返回键,那么我尝试忽略OK单击,但是工作表子类化的NSPanel总是返回自己作为当前第一个响应者。我期待一个字段编辑器,但我得到的只是NSPanel。 1) 有更好的方

在我的应用程序中,我会显示一张包含NSCOMBOX的工作表。如果用户使用箭头键从菜单中选择一个条目,然后返回以选择该条目,则工作表的“确定”按钮也会被操作,因为它将返回作为其等效键。我想停止这些返回键作为OK点击。 在尝试了很多事情之后(除了子类化NSComboBox开始变成噩梦之外),如果组合框是第一个响应者,并且当前事件是一个返回键,那么我尝试忽略OK单击,但是工作表子类化的NSPanel总是返回自己作为当前第一个响应者。我期待一个字段编辑器,但我得到的只是NSPanel。
1) 有更好的方法吗?用户真正想要的是基于键盘的数据输入,而不是四处移动。
2) 如果这是最好的方法,我如何判断组合框是第一个响应者?
我们感激地接受了任何帮助。这肯定是以前处理过的吗?

牧师。安迪

有一个解决办法,虽然不漂亮,但会奏效:

注册两个通知nscomboxwillpopupNotificationnscomboxwilldismissNotification

- (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";
    });
}

有一个解决办法,虽然不漂亮,但会奏效:

注册两个通知nscomboxwillpopupNotificationnscomboxwilldismissNotification

- (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";
    });
}

你试过让combobox成为firstresponder吗?我认为问题在于,当combobox的菜单显示时,firstresponder没有一个明确的值-这就是为什么它最终指向窗口。可怕的解决方法是记录菜单被取消的时间(在ComboboxWillDisponse:)并检查调用OK按钮选择器的时间-如果它们之间的间隔小于0.1s,则忽略OK。OK(确定)按钮仍然闪烁,但至少一般功能正常。丑陋。你试过让combobox成为firstresponder吗?我认为问题在于,当combobox的菜单显示时,firstresponder没有一个明确的值-这就是为什么它最终指向窗口。可怕的解决方法是记录菜单被取消的时间(在ComboboxWillDisclose:)并检查调用OK按钮选择器的时间-如果它们之间的间隔小于0.1s,则忽略OK。OK(确定)按钮仍然闪烁,但至少一般功能正常。丑陋的。