2011-05-13 40 views
1

我有一個包含兩列字段的窗口。左邊是NSTableViewNSTokenField,右邊有兩個NSTextField。我希望Tab鍵順序向左,然後向右。 (因此,在我的窗口中訂單應該是NSTableViewNSTokenFieldNSTextFieldNSTextField)。但是,Cocoa似乎決定了自己的首選訂單,從頂部到底部。 NSTokenField位於窗口中的任何其他控件的下方,所以它始終從NSTableView選項卡右移NSTextField s,然後返回到左下角的NSTokenField在Cocoa應用程序中設置自定義選項卡順序

我試過在蘋果開發者文檔Enable Tabbing Between Text Fields的這一部分中,並在Interface Builder中按照我想要的順序拖動字段之間的nextKeyView。這似乎對Tab鍵順序絕對沒有影響,並且從我所知道的情況來看,Cocoa似乎仍然使用其默認檢測方法來選擇Tab鍵順序。

任何想法?我的目標是10.6+。

回答

2

確保您還將窗口的initialFirstResponder出口設置爲第一個字段(本例中爲表格視圖)。

+0

謝謝......這是問題所在。儘管如此,我確實感覺有點無聊。 :) – 2011-05-19 15:50:42

0

聽起來像是你將不得不這樣做編程:
註冊controlTextDidEndEditing通知,按標籤標識字段,然後調用makeFirstResponder:fieldOfYourChoice的窗口。和/或在現場使用IBAction,通過sender進行標識,並致電makeFirstResponder

+0

爲什麼我必須以編程方式執行它?如果用戶想要移動+標籤怎麼辦?對於它的價值,我確實嘗試過,但沒有奏效。一個問題是NSTableView在你離開它時不會發送一個controlTextDidEndEditing通知給它的委託。即使在NSTokenField和NSTextFields(它們會觸發通知),makeFirstResponder消息似乎也不會更改Tab鍵順序。最後,我不確定在字段上使用IBAction會對我有用,因爲我認爲當按下Enter鍵時會觸發IBAction,並且我不想在按下輸入時更改字段。 – 2011-05-17 15:16:35

+0

如果沒有其他的工作,你可以嘗試捕獲關鍵事件。你所有的控件都是NSResponder的子類,所以如果你繼承它們,你可以自定義NSResponder的keyUp方法。測試該事件是標籤還是換檔標籤。如果沒有,什麼都不要做。如果是這樣,從窗口中找出哪個控件具有firstResponder狀態,以便知道你在哪裏,然後從那裏開始。 (爲了達到這個目的,你必須能夠使用makeFirstResponder,它對我來說既可以用於按鈕也可以用於文本框,也許可以嘗試添加一個0.1延遲?)另外,你可能需要刪除IB中衝突的nextKeyViews。 – Wienke 2011-05-18 17:29:07

相關問題