2013-03-04 86 views
1

在我的應用程序中,我顯示一張帶有NSComboBox的工作表。如果用戶使用箭頭鍵從菜單中選擇一個條目,然後選擇Return來選擇它,那麼工作表的OK按鈕也會被執行,因爲它具有Return作爲其等效鍵。我想停止這些返回鍵作爲確定點擊。 嘗試了很多東西(除了開始變成惡夢的NSComboBox子類之外),我試圖忽略OK點擊,如果組合框是第一個響應者並且當前事件是返回鍵的按鍵,但是NSPanel該工作表從始終返回自身作爲當前的第一響應者。我期待一位現場編輯,但我得到的只是NSPanel。
1)有沒有更好的方法來做到這一點?用戶真正需要基於鍵盤的數據輸入而不是閒逛。
2)如果這是最好的方法,我怎麼知道組合框是第一響應者?
任何幫助感激地接受。當然這已經被處理過了嗎?
牧師安迪NSComboBox - 陷阱返回鍵

+0

您是否嘗試過製作combobox firstresponder? – 2013-03-04 14:37:28

+0

我認爲問題是當組合框的菜單顯示時,第一響應者沒有明確的值 - 這就是爲什麼它最終指向窗口。 – 2013-03-06 12:07:59

+1

可怕的解決方法是記錄菜單被解散的時間(在comboBoxWillDismiss :)中,並檢查確定按鈕選擇器被調用的時間 - 如果它們之間的比值小於0.1,我將忽略OK。 OK按鈕仍然閃爍,但至少通用功能正常。醜陋。 – 2013-03-06 12:11:43

回答

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