2015-08-16 168 views
0

由於有些日子,我試圖爲NSTextField編碼自動完成。自動完成應該是這樣的,當用戶點擊NSTextfield時,應該在TextField下顯示一個列表,其中有可能。輸入一個字母或數字後,列表應該刷新可能性。NSTextField自動完成/建議

在此列表中的建議應來自一個NSMutableArrayNSMutableDictionary

此自動填充/自我暗示方法應該是對於一個MAC應用。

回答

1

對於這個問題,您可以使用NSComboBox。您還需要在IB或[comboBox setCompletes:YES]中設置代碼中的Autocompletes屬性。請記住,它是區分大小寫的。

但是,如果你需要它,你所描述的精確的方式來完成的,你需要通過繼承NSWindowControllerNSTableView做出的排行榜,並改變它們看起來像一個列表或菜單下你NSTextField顯現。設置NSTextField的委託,並對文本更改進行搜索和列表更新。

在這種情況下避免NSMenu,因爲它會在您輸入時從文本字段中移除焦點。

蘋果在WWDC 2010 Session 145中解決它。 他們解釋了關於帶有建議菜單的文本字段以及如何使其工作。他們還在他們的網站上提供了示例代碼。

您可以找到示例代碼here

+0

謝謝你的描述。這看起來很困難。你有一個教程或一個代碼的例子嗎? – Robby

+0

@Robby歡迎您,我編輯了答案並添加了示例代碼和相關WWDC會話的鏈接,他們在該會話中的某個時刻解釋了代碼。 –

+0

@Robby您是否嘗試過示例代碼? –

2

只是增加@ ABCDEFG的回答,使NSComboBox不區分大小寫的,你也可以繼承,並重寫它的[completedString:]方法是這樣的:

- (NSString *) completedString:(NSString *)string { 
    NSUInteger l = [string length]; 
    if (!!l) 
    for (NSString *match in [self objectValues]) 
     if ([[match commonPrefixWithString:string options:NSCaseInsensitiveSearch] length] == l) 
     return [match stringByReplacingCharactersInRange:NSMakeRange(0, l) withString:string]; 

    return nil; 
}