macos – 在文本字段中使用twitter用户名自动完成(可可)

我正在寻找NSTokenField,NSTextField和NSTextView而没有运气来执行以下操作:

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

要去煮咖啡,@ pe

当你开始写@时,我想帮助用户自动填写用户名,例如@peter.我有一个NSArray,其用户名如下:

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

我该怎么做才能实现简单的自动完成?如果你不得不按F5或其他东西开始,我会很高兴.我遇到的问题是,使用NSTokenField我不知道我应该如何对字符串进行标记化,使用NSTextField它只能在我在推文开头写@username并且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”……重复你的Lexicon中的每一个单词.这样快得多.

如果您想支持自动完成,只需在检测到控件中的文本发生变化时调用’complete:’方法.

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...