2011-10-03 110 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

相关问题