我在我的Cocoa應用程序中有一個表單,其中包含我想通過鍵盤控制的NSSegmentedControl。 NSSegmentedControl似乎很不願意成爲第一響應者,但是。使用鍵盤控制NSSegmentedControl
將窗口的初始第一響應者設置爲分段控件什麼也不做 - 當窗口第一次加載時它不會有鍵盤焦點。它接收焦點,如果我手動設置的第一個響應者這樣的,但是:
[segmentedControl.window makeFirstResponder: segmentedControl];
這將正常工作,如果表格的唯一部分是分段控制。如果我添加另一個字段(比如NSTextField),並將分段控件的nextResponder設置爲該字段,則分段控件將永遠不會成爲第一個響應者。焦點將立即轉到文本字段,然後按Tab鍵切換回分段控件不起作用。
我試過繼承NSSegmentedControl並覆蓋acceptFirstResponder,becomeFirstResponder等無濟於事。唯一有所作爲的是resignFirstResponder - 如果我從該方法返回NO,則分段控件確實會保持焦點,但顯然我不希望它始終保持焦點。
關於如何讓控件的行爲像一個正常的響應者的任何想法?
在這種情況下,它的可用性和效率更少。在沒有詳細討論我的特定用例的情況下,情況涉及通常通過鍵盤快捷方式召喚的彈出窗口內的非常小的窗體,因此用戶通過箭頭鍵選擇選項比鼠標。此外,從我的簡短測試中,NSPopUpButton似乎在保留第一響應者狀態方面遇到與NSSegmentedControl相同的問題。感謝您的意見,但我非常感謝。 – jlong64
這是*方式*遲到,但因爲我剛剛收到這個答案的最高票數,這讓我意識到我錯過了你的評論。我沒有提供解決方案,所以我會提出一個簡單的解決方案:您的popover的viewController.view可以處理鍵盤事件(攔截並響應moveLeft和moveRight NSResponder事件)並通過其控制器更新分段控件。請記得在彈出窗口顯示時使此視圖成爲第一響應者。 –