iOS 用NSPredicate实现搜索 筛选

关于搜索一般使用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 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,206评论 4 61
  • 总有起风的清晨,总有暖和的午后,总有绚烂的黄昏,总有流星的夜晚,所以不如保持顺其自然的心境,把握每一个瞬间,试着去...
    拾光缩写阅读 2,523评论 0 0
  • 看演唱会时,每个座位上都有一个纸质的ROCK手套,每个手套上都有一句歌词。 我拿到的那句是:爱情不过是生活的屁。 ...
    用余生追赶时光阅读 7,730评论 1 1