当我们键入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){
    //..