0

検索バーに基づいてフィルタリングするテーブルビューがあります。これは、検索がセル テキストと同じ文字で始まる限りうまく機能します。

途中であっても、セル テキストの任意の部分を検索できるようにしたいと考えています。例えば。セル テキストが「Jon Bon Jovi」の場合、ユーザーが検索バーに「Bon Jovi」または単に「Jovi」と入力しても表示されるようにしたいと思います。

私の現在のコードは以下の通りです:

for (NSDictionary *item in listItems)
{

    if ([scope isEqualToString:@"All"] || [[item objectForKey:@"type"]  
    isEqualToString:scope] || scope == nil)
    {
        NSComparisonResult result = [[item objectForKey:@"name"] 
        compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) 
        range:NSMakeRange(0, [searchText length])];

        if (result == NSOrderedSame)
        {
            [filteredListItems addObject:item];
        }
    }
}

どんな助けでも素晴らしいでしょう。皆さん、ありがとうございました!

4

1 に答える 1

3

(アイテムの名前に対して検索文字列を並べ替える)を使用する代わりに、実際にアイテム名全体で検索文字列を検索する-を確認することを-compare:options:range:検討してください。ステートメント-rangeOfString:options:の内部を次のように置き換えます。if

NSStringCompareOptions opts = (NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch);
NSRange resultRange = [[item objectForKey:@"name"] rangeOfString:searchText
                                                         options:opts];
if (resultRange.location != NSNotFound) {
    [filteredListItems addObject:item];
}
于 2013-01-19T23:02:09.023 に答える