2015-12-03 55 views
0

我在NSPopover中有一個NSSearchField。單擊NSStatusBar項目時會打開此彈出窗口。強制NSSearchField在它成爲第一個響應者時開始編輯

在我的NSPopover的視圖控制器的viewWillAppear()中,我在我的NSSearchField上調用self.view.window?.makeFirstResponder(searchField)。我希望此搜索字段在彈出窗口顯示時準備好進行編輯。通過準備編輯,我的意思是用戶不必點擊NSSearchField內部即可開始輸入。

在這一點上,我的實現並不總是工作。有時候,它起作用,並且隨着搜索字段的準備,光標閃爍,彈出窗口打開。但是,大多數情況下,特別是當我在打開彈出窗口時在不同的應用程序中編輯文本時,必須單擊NSSearchField進行編輯。

我已將子搜索字段重寫並覆蓋了becomeFirstResponder()方法,並且我可以確認它每次都會被調用。

當字段成爲第一響應者時,我怎麼能不能「竊取」從其他應用程序編輯我的搜索字段的權利?這甚至有可能嗎?

+1

這可能是可能的,但不推薦;從另一個應用程序竊取重點本質上就像惡意軟件一樣。 –

+0

我明白你的觀點。也就是說,有些應用程序會這樣做:如果您正在輸入文本字段並打開消息應用程序,則您輸入消息的NSTextField可以自動編輯。也許這種行爲只適用於Apple? – elliottbolzan

+0

通常它是一個應用程序的助手工具,將被安裝,然後授予該類型的行爲的權限;不是Apple專用的應用程序。 –

回答

0

事實證明,關鍵是讓我的應用程序走在最前沿。

我能夠通過調用NSApplication.sharedApplication().activateIgnoringOtherApps(true)爲我的應用程序提供系統的重點。我的NSSearchField已經成爲第一個響應者,現在可以直接編輯。

0

您應該使用viewDidAppear:使搜索字段成爲第一響應者。

通常的觀點是沒有視圖層次結構中,當viewWillAppear:被調用,所以window屬性爲nil(和你的可選鏈接將只是不叫makeFirstResponder)。

+0

這是有道理的,但不幸的是,由於某種原因,它不能解決它。在這兩種情況下,無論我是從viewWillAppear:還是viewDidAppear:調用此函數,NSSearchField都會收到該調用。另外,如果我在調用之後檢查窗口的第一個響應者,它就是NSSearchField。 – elliottbolzan

相關問題