UISearch бар нечувствителен к регистру? - PullRequest
5 голосов
/ 17 марта 2010

В табличном представлении я установил 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 ]

14 голосов
/ 17 марта 2010

Самый простой способ сделать это, вероятно,

 NSRange r = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];
2 голосов
/ 15 ноября 2010

Попробуйте это.

- (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];
}
1 голос
/ 17 марта 2010

Когда вы делаете сравнение, попробуйте сделать это с строчной версией.

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

Просто чтобы уточнить, это не изменит ни одно из значений, просто верните строчную версию оригинала, которую вызатем используйте для сравнения с

0 голосов
/ 17 марта 2010

Есть некоторая функция 'lowercaseString', не знаю, где я натолкнулся на это видение, поскольку я не имею никакого отношения к iPhone, я уверен, что если вы засканируете его, вы найдете что-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...