1、NSPredicate

(1)比较运算符 

1.比较运算符 > 、< 、== 、 >= 、<= 、 !=

 

运算符还可以跟逻辑运算符一起使用,&&  ,  || ,AND, OR 谓词不区分大小写

NSPredicate *p = [NSPredicate predicateWithFormat:@"age >= 18 && name = '周周'"];   

//根据谓词要求返回响应数组

NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

//    [self.dataList filterUsingPredicate:p];

(2)范围运算符

IN:等于SQL的IN操作,左边的表达必须出现在右边指定的集合中。 

BETWEEN:左边的表达式等于右边的表达式的值或者介于它们之间,右边是一个有两个指定上限和下限的数值的数列(指定顺序的数列)

NSPredicate * p = [NSPredicate predicateWithFormat:@"age BETWEEN {30,60}"];

NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

(3)头尾查询

以xx开头 --BEGINSWITH

 

以xx结尾 --ENDSWITH

    NSPredicate * p = [NSPredicate predicateWithFormat:@"name BEGINSWITH '大' || name ENDSWITH %@",@"露"];    

 

    NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

(4)包含查询

包含CONTAINS:左边的表达式包含右边的表达式。

NSPredicate * p = [NSPredicate predicateWithFormat:@"%K CONTAINS %@",@"name",@"欢”];

NSPredicate * p = [NSPredicate predicateWithFormat:@"%K CONTAINS '欢'",@"name"];

 

    NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

(5)     模糊查询

     LIKE:左边的表达式等于右边的表达式

     *表示零个或多个字符

     ?表示一个字符

    //    NSPredicate * p = [NSPredicate predicateWithFormat:@"name LIKE '*欢*'"];

    NSPredicate * p = [NSPredicate predicateWithFormat:@"name LIKE '?欢*'"];

        NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

(6)字符串本身查询    

//字符串本身查询,数组里的每一项是字符串,才能用SELF查询

    

    NSArray * names = @[@"大欢",@"周周",@"露露",@"饭饭",@"欢哥"];

    

    //    NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF = '大欢'"];

    

    NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",@"欢"];

    NSArray * personList = [names filteredArrayUsingPredicate:p];

(7)正则表达式:MATCHES

    NSString *pattern = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";

    NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",pattern];

    

    //传入对象是否匹配正则表达式的谓词

    BOOL isTelNumber = [p evaluateWithObject:@"118260930"];

    

    if (isTelNumber) {

        NSLog(@"是手机号");

    } else {

        NSLog(@"不是手机号");

 

    }    

2、UISearchController搜索控制器

(1)第一种形式  

  //创建一个接受结果并展示的表格控制器

    SearchResultViewController * resultVC = [[SearchResultViewController alloc] initWithStyle:UITableViewStylePlain];

    //创建搜索控制器

    UISearchController * searchVC = [[UISearchController alloc] initWithSearchResultsController:resultVC];

    //设置数据更新代理

    searchVC.searchResultsUpdater = self;

    //使用模态视图跳转到搜索控制器

 

    [self presentViewController:searchVC animated:YES completion:nil];    

    //通过searchBar得到输入的文字

    NSString * searchString = searchController.searchBar.text;

    

    //过滤搜索内容

    [self updateFilterContent:searchString];

    

    //self.resultList已经有搜索到的值了

    //判断是否searchController存在searchResultsController

    if (searchController.searchResultsController) {

        

        //通过searchResultsController得到SearchResultViewController的引用

         SearchResultViewController * searchResultVC = (SearchResultViewController *)searchController.searchResultsController;        

//给搜索结果控制器赋数据源

searchResultVC.searchResults = self.resultList;        

//将搜索结果控制器刷新表格

 

[searchResultVC.tableView reloadData];

- (void)updateFilterContent:(NSString *)searchString {

    

    //[c] 不区分大小写

    

    NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@",searchString];

    

    self.resultList = [self.dataList filteredArrayUsingPredicate:p];

    

 

}

(2)第二种形式

#warning 一定要将UISearchController对象设置成全局变量

    self.tableView.tableHeaderView = self.searchVC.searchBar;

并将button响应事件 放在viewDidLoad中