由於有些日子,我試圖爲NSTextField
編碼自動完成。自動完成應該是這樣的,當用戶點擊NSTextfield時,應該在TextField下顯示一個列表,其中有可能。輸入一個字母或數字後,列表應該刷新可能性。NSTextField自動完成/建議
在此列表中的建議應來自一個NSMutableArray
或NSMutableDictionary
此自動填充/自我暗示方法應該是對於一個MAC應用。
由於有些日子,我試圖爲NSTextField
編碼自動完成。自動完成應該是這樣的,當用戶點擊NSTextfield時,應該在TextField下顯示一個列表,其中有可能。輸入一個字母或數字後,列表應該刷新可能性。NSTextField自動完成/建議
在此列表中的建議應來自一個NSMutableArray
或NSMutableDictionary
此自動填充/自我暗示方法應該是對於一個MAC應用。
對於這個問題,您可以使用NSComboBox
。您還需要在IB或[comboBox setCompletes:YES]
中設置代碼中的Autocompletes
屬性。請記住,它是區分大小寫的。
但是,如果你需要它,你所描述的精確的方式來完成的,你需要通過繼承NSWindowController
和NSTableView
做出的排行榜,並改變它們看起來像一個列表或菜單下你NSTextField
顯現。設置NSTextField
的委託,並對文本更改進行搜索和列表更新。
在這種情況下避免NSMenu
,因爲它會在您輸入時從文本字段中移除焦點。
蘋果在WWDC 2010 Session 145中解決它。 他們解釋了關於帶有建議菜單的文本字段以及如何使其工作。他們還在他們的網站上提供了示例代碼。
您可以找到示例代碼here。
只是增加@ 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;
}
謝謝你的描述。這看起來很困難。你有一個教程或一個代碼的例子嗎? – Robby
@Robby歡迎您,我編輯了答案並添加了示例代碼和相關WWDC會話的鏈接,他們在該會話中的某個時刻解釋了代碼。 –
@Robby您是否嘗試過示例代碼? –