美文网首页iOS搜索iOS接下来要研究的知识点
iOS 用NSPredicate实现搜索 筛选

iOS 用NSPredicate实现搜索 筛选

作者: Touchs | 来源:发表于2016-06-30 14:53 被阅读1408次

    关于搜索一般使用UISearchbar + UISearchDisplayController 实现, UISearchController毕竟iOS8才出来的. 简单搜索建议使用. 如果需求比较苛刻的话 ,还是用textfild 更容易自定义.

    屏幕快照 2016-06-30 13.46.46.png

    直接上代码...

    -(void)filterContentForSearchText:(NSString*)searchText{
        
    //我这里把没有 文本时读取数据库 的情形都写在一起了
        if (searchText.length == 0 && [[TCRecondBase selectHistroySearchGames] count] > 0) {
            self.type = HistroyType;
            self.datasArry = [TCRecondBase selectHistroySearchGames];
            
        }else{
            self.type = SearchResultType;
        }
        //检测输入的是不是拼音
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"^[A-Za-z]*$"];
        NSMutableArray* resultArry = [NSMutableArray array];
    //是拼音则匹配以输入的拼音开头的且不区分大小写的游戏名
        if ([predicate evaluateWithObject:searchText]) {
            
            NSPredicate *predict = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[cd] %@",searchText];
            NSArray* spallArry = [_allSpalls filteredArrayUsingPredicate:predict];
            for (NSString* str in spallArry) {
                
                NSInteger index = [_allSpalls indexOfObject:str];
                
                [resultArry addObject:[_allNames objectAtIndex:index]];
            }
    //输入的是数字或者汉字 则匹配名字中包含输入字符的游戏名
        }else{ 
            NSPredicate *predict = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",searchText];
    //或者使用 @"name LIKE[cd] '*%@*'"    //*代表通配符
            resultArry = [_allNames filteredArrayUsingPredicate:predict].mutableCopy;
        }
        self.searchResultArry = resultArry;
        [self.histroyTableView reloadData];
    }
    //NSPredicate功能很强大,更多谓词匹配语法自行百度NSPredicate的使用
    
    屏幕快照 2016-06-30 13.47.56.png 屏幕快照 2016-06-30 13.48.29.png

    相关文章

      网友评论

      本文标题:iOS 用NSPredicate实现搜索 筛选

      本文链接:https://www.haomeiwen.com/subject/whtfjttx.html