2012-06-23 52 views
0

我有一個NSTextField UI元素,用戶可以在該文本字段中輸入內容,並且我想在文本字段下方以「實時搜索」的形式列出完成列表。獲取NSTextField完成索引

我希望能夠使用本地文本完成基礎設施,但是當用戶選擇適當的完成時,我不想僅僅將文本放入NSTextField中。用戶實際上是通過搜索對象的字符串屬性來選擇NSArray中的許多自定義對象之一。當他們選擇時,我需要知道他們選擇了哪個對象。

有沒有辦法知道選擇完成的索引(以便我可以從我的數組中的索引獲取對象)?

或者我需要忘記使用本機文本完成,只是填充和顯示文本字段下的下拉菜單?

回答

0

在我使用的,因爲這NSTokenField增加了一些UI外觀事物的NSTokenField結束爲了我。但我認爲我提出的額外技巧(見下文)也可能適用於NSTextField。對不起,這是令人費解的。

簡而言之,我所做的是生成一個NSMutableDictionary(一個iVar),其中的鍵是NSTokenField中部分字符串的完整填充,對象是完成字符串表示的自定義對象。換句話說,當我生成自定義完成字符串並將它們放入NSArray以從NSTokenFieldDelegate方法tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:返回時,我同時將這些完成和它們表示的對象填充到NSMutableDictionary中,並完成鍵和對象作爲值。

當用戶「標記」完成時(通過按下Return或Tab - 我修改了標記化characterSet,所有這些都將標記),調用NSTokenFieldDelegate方法tokenField:representedObjectForEditingString:。裏面有,我能夠通過使用editingString參數爲重點,以獲得來自的NSMutableDictionary我的對象:[dict objectForKey:editingString]

我認爲有可能用在controlTextDidChange: NSTextFieldDelegate方法的一些爭論做同樣的事情上落成NSTextField,而不是使用字典技巧的NSTokenField,但爲了達到這個目的,我認爲您必須在NSTextField中完整完成,獲取其字符串值並將其用作關鍵字。就我而言,我不希望在文本字段中完成整個工作,所以NSTokenField的標記化對我更好。

0

在這種情況下你可以使用NSComboBox嗎?也許繼承NSComboBoxCell覆蓋

- (NSString *)completedString:(NSString *)substring 

你也可以觀察到在NSComboBox delegate protocol變化來檢測更改所選項目

+0

這是一個很好的想法,但我不希望向下的箭頭,我正在做一些其他的東西視覺與文本字段,我不知道我是否可以複製與組合框。你知道是否有辦法抑制向下箭頭的顯示,並且當下拉不顯示時讓NSComboBox看起來像純文本字段? – pjv

+0

我不知道。也許你可以重寫drawRect: –

+0

感謝你的想法。我正在考慮獲得我真正想要的外觀,我可能必須在文本字段的底部動態粘貼單列NSTableView。似乎有點混亂,但到目前爲止,我想不出另一種方式來做到這一點。如果完成發射了一個通知,或者告訴NSTextFieldDelegate在發生時選擇了哪個完成,那將會很好。 – pjv