2012-09-25 56 views
3

我正在處理一個呈現包含NSTextFields數量的NSPopover的應用程序。雖然我可以像預期的那樣在這些字段之間進行選擇,但彈出窗口會在出現時選擇特定的文本字段進入編輯狀態,而不是我想要編輯的字段;我希望能夠以編程方式(或在Interface Builder中)定義在彈出窗口外觀上編輯的文本字段。我怎樣才能做到這一點?在外觀中指定在NSPopover中編輯NSTextField

我已經設置了適當的關鍵視圖循環,通過連接所有涉及的各種文本字段的IB插口,並且我已經將popover的nextResponder屬性連接到我想先編輯的文本字段,噸似乎有一個效果 - 彈出窗口仍然會選擇其首選文本字段,而不是我的。 Window Programming Guide建議我將該窗口的出口設置爲我想要選擇的視圖,但NSPopover不是NSWindow並且沒有initialFirstResponder屬性(除非我錯過了某些顯而易見的內容)。

當NSPopover出現時,有什麼方法可以指定我想要編輯哪個NSTextField?

+0

我沒有時間來建立一個測試,但一旦顯示,該酥料餅_is_一個窗口。在代理的'popoverDidShow:'中可以從NSTextField獲得'NSWindow',然後將該窗口告訴'makeFirstResponder'文本字段? –

+0

@SmilinBrian:這是我現在使用的解決方法,但是在'-popoverDidShow:'中運行它的問題是,有一個簡短的(但顯而易見的)時期,在跳轉到我選擇的字段之前選擇彈出窗口的默認字段。我也試過'-popoverWillShow:',但是在popover的窗口中改變第一個響應者似乎並沒有工作 - 沒有改變。 – Tim

+0

令人沮喪但有用的信息。對不起,我不能進一步幫助。 –

回答

0

我認爲你可以通過設置你不想讓焦點在IB中的「可選擇」而不是「可編輯」的所有文本字段,這應該離開你想要開始的一個文本字段作爲第一響應者。然後,在你的popoverDidShow:方法中,將它們全部設置爲可編輯狀態,並且應該可以像往常一樣在它們之間進行選擇。

4

我想你說你嘗試使用-makeFirstResponder:並傳遞文本字段。這將設置窗口的firstResponder,但這不同於initialFirstResponder,並且該窗口必須將initialFirstResponder設置爲nil以外的其他值才能遵守關鍵視圖循環。 (Source)點小文章,你嘗試過什麼工作對我來說:

- (void)popoverWillShow:(NSNotification *)notification 
{ 
    // Set the window's initialFirstResponder so that the key view loop isn't auto-recalculated. 
    [[myField window] setInitialFirstResponder:myField]; 
} 
+1

這幫了我,謝謝! – Joel