自动完成与twitter用户名在文本字段(可可)



我正在查看NSTokenField, NSTextField和NSTextView,没有运气做以下事情:

我正在写一个推特客户端,当你想推特一个新的推特,然后你开始写一个文本字段,例如:

Going to make coffee, @pe

当你开始写一个@然后我想帮助用户自动完成用户名,例如@peter。我有一个用户名为

的NSArray

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

我应该怎么做才能启用一个简单的自动补全?如果你也需要按F5或者其他什么,我会很高兴的。我遇到的问题是,与NSTokenField我不知道我应该如何标记字符串,与NSTextField它只工作当我写@用户名在推文的开始和NSTextView似乎真的很复杂,太多了这样一个简单的事情。

最基本的实现包括重写这个方法…当然不是最优的,但你应该明白:

- (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. 
}

一旦你开始有大量的数据,你需要采用策略来预先做你的搜索,通过将单词存储到散列中,其中包含部分文本(例如,"Hello"将被放入4个不同的数组中,并放入NSDictionary键"H","He","Hel","Hell"…重复你字典里的每一个单词。那样快多了。

如果你想支持自动完成,只需调用'complete:'方法当你检测到文本在你的控件中改变。

相关内容

  • 没有找到相关文章

最新更新