In a table view I have set a UISearchBar, set the delegate, and add the protocol.
When user tap a word everything is okay except that the search of "tennis" is different from "Tennis".
How can I make the search bar a case-insensitive UISearchBar? Here is my code where I think evrything happens:
- (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];
}
The easiest way to do this is probably
NSRange r = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];
Try this.
- (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];
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With