当我们键入iPhone的第一个字母时,显示搜索的所有名称
我想搜索所有以特定字母开头的名称,这意味着当我在搜索栏中键入一个字符时,它将显示所有以该字符开头的名称,但不幸的是,它也会显示包含该字符的名称。我只想显示那些以我在搜索栏中键入的特定字符开头的名称。请告诉我解决办法当我们键入iPhone的第一个字母时,显示搜索的所有名称,iphone,ios,uisearchbar,Iphone,Ios,Uisearchbar,我想搜索所有以特定字母开头的名称,这意味着当我在搜索栏中键入一个字符时,它将显示所有以该字符开头的名称,但不幸的是,它也会显示包含该字符的名称。我只想显示那些以我在搜索栏中键入的特定字符开头的名称。请告诉我解决办法 - (void)searchBar:(UISearchBar *)searchBars textDidChange:(NSString *)search { if(search.length == 0) { isFiltered = FALSE; } else
- (void)searchBar:(UISearchBar *)searchBars textDidChange:(NSString *)search
{
if(search.length == 0)
{
isFiltered = FALSE;
}
else{
isFiltered=true;
itemData =[[NSMutableArray alloc] init];
for (Item *itemsearch in listOfItemForStock) {
NSString *stringId = [NSString stringWithFormat:@"%i",itemsearch.iditem];
NSString *stringName = [NSString stringWithFormat:@"%@",itemsearch.name];
NSRange idRange = [stringId rangeOfString:search options:(NSCaseInsensitiveSearch)];
NSRange nameRange = [stringName rangeOfString:search options:(NSCaseInsensitiveSearch)];
if(idRange.location!=NSNotFound || nameRange.location != NSNotFound){
[self.itemData addObject:itemsearch];
}
}
}
[self.tableView reloadData];
}如果(idRange.location!=NSNotFound | | nameRange.location!=NSNotFound){
将名称检查更改为前缀检查。将nameRange变量替换为仅指示stringName是否以搜索字符串开头的BOOL
/// ...
BOOL nameMatches = [[stringName lowercaseString] hasPrefix:[search lowercaseString]];
if(idRange.location!=NSNotFound || nameMatches){
//..
您正在搜索栏代理处筛选姓名,是吗?是的,我想在搜索栏代理处筛选姓名您只需要输入一个字符吗?我看到还有一个id搜索,而不仅仅是姓名。我的示例,现在它工作了如果您不需要id搜索,并且只想从一开始按姓名搜索,那么您的示例是几乎正确。您需要删除
idRange.location!=NSNotFound
条件,并使用您使用的搜索条件,如(您的比较代码){[self.itemData addObject:itemsearch];}
/// ...
BOOL nameMatches = [[stringName lowercaseString] hasPrefix:[search lowercaseString]];
if(idRange.location!=NSNotFound || nameMatches){
//..