我在Objective-C中使用Xcode开发应用程序。该应用程序有一个餐厅的TableView。我的问题是当我使用SearchBar时,过滤器区分大小写,我希望得到一个不区分大小写的搜索。
我知道我必须改变我的searchBar textDidChange
方法,我寻求帮助,但我不知道如何在我的情况下改变它。有人能帮我吗?非常感谢你。
这是我的searchBar textDidChange
方法:
-(void) searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if (searchText.length == 0) {
//Set our boolean flag
isFiltered = NO;
} else {
//Set our boolean flag
isFiltered = YES;
}
//Alloc and init our filteredData
filteredRest = [[NSMutableArray alloc] init];
for (Restaurant *item in originData) {
if ([item.title containsString:searchText]) {
[filteredRest addObject:item];
}
}
//Reload our table view
[self.tableView reloadData];
}
谢谢。
答案 0 :(得分:4)
更改此行
if ([item.title containsString:searchText]) {
[filteredRest addObject:item];
}
有了这个
if ([[item.title lowercaseString]containsString:[searchText lowercaseString]]) {
[filteredRest addObject:item];
}
答案 1 :(得分:1)
这是您应该更新代码的方式:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if (searchText.length == 0) {
//Set our boolean flag
isFiltered = NO;
} else {
//Set our boolean flag
isFiltered = YES;
}
//Alloc and init our filteredData
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title CONTAINS[cd] %@", searchText];
filteredRest = [originData filteredArrayUsingPredicate:predicate]
//Reload our table view
[self.tableView reloadData];
}
答案 2 :(得分:0)
一个更好的解决方案。
if (!([item.title rangeOfString:searchText options:NSCaseInsensitiveSearch].location == NSNotFound))
{
[filteredRest addObject:item];
}