5

テーブル ビューで、UISearchBar を設定し、デリゲートを設定して、プロトコルを追加しました。

ユーザーが単語をタップすると、「テニス」の検索が「テニス」とは異なることを除いて、すべて問題ありません。

検索バーを大文字と小文字を区別しない UISearchBar にするにはどうすればよいですか? すべてが起こると思う私のコードは次のとおりです。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
 [tableData removeAllObjects];// remove all data that belongs to previous search
 if([searchText isEqualToString:@""]||searchText==nil){
  [myTableView reloadData];
  return;
 }
 NSInteger counter = 0;
 for(NSString *name in dataSource)
 {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
  NSRange r = [name rangeOfString:searchText];
  if(r.location != NSNotFound)
   [tableData addObject:name];
  counter++;
  [pool release];
 }
 [myTableView reloadData];
}
4

4 に答える 4

14

これを行う最も簡単な方法はおそらく

 NSRange r = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];
于 2010-03-16T23:46:51.067 に答える
2

これを試して。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [DetailSearchArray removeAllObjects];// remove all data that belongs to previous search

    if([searchText isEqualToString:@""]){
        [table reloadData];
        return;
    }

    NSInteger counter = 0;
    NSArray *result = [[NSArray alloc] initWithArray:[resultArray filteredArrayUsingPredicate:predicate]];

    for (NSString *name in  resultArray  ) {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
        NSRange r = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];
        //NSRange r=[name rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
        if(r.location != NSNotFound)
        {
            if(r.location== 0)//that is we are checking only the start of the names.
            {
                [DetailSearchArray addObject:name]; 
            }
        }

        }
        counter++;
        [pool release];
    }

    [table reloadData];
}
于 2010-11-15T08:59:14.160 に答える
1

比較するときは、小文字バージョンで比較してみてください。

NSRange r = [[name lowercaseString] rangeOfString:[searchText lowercaseString]];

明確にするために、これは値を変更せず、元の小文字バージョンを返すだけで、それを使用して比較を行います。

于 2010-03-16T23:17:23.987 に答える
0

いくつかの「lowercaseString」関数があります。私はiPhoneとは何の関係もないので、これをどこで見つけたのかわかりません。グーグルで検索すると、何かが見つかると確信しています。

于 2010-03-16T22:50:00.243 に答える