4

私は NSTokenField 、 NSTextField 、および NSTextView を調べていましたが、次のことを行うには運がありませんでした:

私は Twtitter クライアントを作成しています。新しいツイートを Twitter で送信したい場合は、次のようにテキスト フィールドに書き込みます。

Going to make coffee, @pe

を書き始めたら@、ユーザーがたとえば@peter. 次のようなユーザー名を持つ NSArray があります。

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

単純なオートコンプリートを有効にするにはどうすればよいですか? 手始めにF5なども押していただけると嬉しいです。私が抱えている問題は、NSTokenField では文字列をトークン化する方法がわからないということです。もの。

4

1 に答える 1

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

大量のデータを取得し始めたら、単語を部分的なテキストを含むハッシュに格納することにより、検索を事前に実行する戦略を採用する必要があります (「Hello」を 4 つの異なる配列に配置するなど)。NSDictionary「H」、「He」、「Hel」、「Hell」のキー.. レキシコンのすべての単語で繰り返します。

オートコンプリートをサポートしたい場合は、コントロール内でテキストが変化していることを検出したときに、'complete:' メソッドを呼び出すだけです。

于 2011-12-16T01:33:05.687 に答える