2011-10-03 109 views
4

我看着NSTokenField,的NSTextField和NSTextView沒有運氣做到以下幾點:自動完成在文本字段的Twitter用戶名(可可)

我寫一個Twtitter客戶端,當你想要Twitter上新建推則你開始在文本字段中寫例如:

Going to make coffee, @pe

當你開始寫一個@話,我想幫助用戶自動完成例如@peter的用戶名。我有喜歡的用戶名的NSArray一:

NSArray *usernames = [NSArray arrayWithObjects:@"@andreas", @"@clara", @"@jeena", @"@peter"]

我應該怎麼做,使簡單的autocompletation?我會很高興,如果你不得不按F5或什麼的初學者。我遇到的問題是,在使用NSTokenField時,我不知道應該如何標記字符串,而NSTextField只有在我在推文開頭寫入@username時才起作用,而NSTextView看起來真的很複雜,而且對於如此簡單事情。

回答

3

最基本的實現涉及重寫此方法......絕對不是最佳的,但你應該得到的想法:

- (NSArray *) completionsForPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index { 
    // this would be defined somewhere else, but just for example.. 
    NSArray *usernames = [NSArray arrayWithObjects:@"@andreas", @"@clara", @"@jeena", @"@peter"]; 

    NSMutableArray *matchedNames = [NSMutableArray array]; 
    NSString *toMatch = [[self string] substringWithRange:charRange]; 
    for(NSString *username in usernames) { 
     [matchedNames addObject:username]; 
    } 

    return matchedNames; // that's it. 
} 

一旦你開始有大量的數據,你需要使用的策略預先做好你的搜索,把單詞中的部分文字存入散列(例如,「你好」將被放入4個不同的數組中,填入NSDictionary鍵爲「H」,「他」,「Hel」,「地獄「...用詞彙表中的每個單詞重複一次,這樣更快。

如果你想支持自動完成,只要調用'complete:'方法即可檢測文本正在改變你的控制。

+0

有沒有一種方法只顯示文本視圖內的第一個匹配內嵌沒有其他結果的列表? – startswithaj

相關問題