IOS8下的数据搜索

以前一直都使用UISearchDisplayController和NSPredicate来做数据的搜素过滤,当时今天在使用UISearchDisplayController这个控件的时候发现它被苹果用一条明显的红线给划掉了,这说明苹果已经不再推荐使用了。查了下文档发现在IOS8中苹果已经使用新的UISearchController来替代了。下面跟大家分享下UISearchController的使用!直接上代码:

#import "ViewController.h"
/**
 *  实现必要的协议
 */
@interface ViewController ()<UISearchResultsUpdating,UITableViewDataSource>
{
    NSArray *listArr;
    NSArray *resultArr;
    UISearchController *searchCT;
}
@end

@implementation ViewController
/**
 *  IOS8更新之后原来的搜索组件"UISearchDisplayController"已经被注销了,注销的原因是这个类有局限性,只能将搜索结果显示在UITableView上。
 在IOS8下取代UISearchDisplayController的是UISearchController!
 */

- (void)viewDidLoad {
    [super viewDidLoad];
    //实例化数组数据
    listArr=[NSArray arrayWithObjects:@"iphone",@"ipod",@"ipad",@"appleTV",@"macMini",@"macPro",@"macAir",@"iMac", nil];
    resultArr=[NSArray new];
    //实例化这个搜索对象,最后一个参数nil表示将搜索的结果显示在当前的视图中
    searchCT=[[UISearchController alloc]initWithSearchResultsController:nil];
    //设置一个controller负责响应searchController的更新
    searchCT.searchResultsUpdater=self;
    self.tableView.dataSource=self;
    searchCT.dimsBackgroundDuringPresentation=NO;
    CGRect searchRect=searchCT.searchBar.frame;
    searchRect.size.height=44;
    searchCT.searchBar.frame=searchRect;
    //添加到父视图的顶部
    self.tableView.tableHeaderView=searchCT.searchBar;
    //搜索的结果可以覆盖当前的页面
    self.definesPresentationContext=YES;
    // Do any additional setup after loading the view, typically from a nib.
}
/**
 *  tableView的数据源方法
 */
-(NSInteger )tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if (resultArr!=nil) {
        //显示的是搜索出来的数据
        return resultArr.count;
    }else{
        //显示的默认的数据
        return listArr.count;
    }
}

-(NSInteger )numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}
static NSString *identifier=@"myCell";
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell;
    cell=[tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
    if (cell == nil) {
        //自己创建
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"myCell"];
    }
    //设置cell的属性
    if (resultArr !=nil) {
        cell.textLabel.text=[resultArr objectAtIndex:indexPath.row];
    }else{
        cell.textLabel.text=[listArr objectAtIndex:indexPath.row];
    }
    return cell;

}
/**
 *  searchController的代理方法
 */

-(void )updateSearchResultsForSearchController:(UISearchController *)searchController{
    if (searchCT.isActive) {
        //如果搜索控件可用,取到搜索条里面的文本内容
        NSString *myResult=searchCT.searchBar.text;
        if (myResult.length>0) {
            //如果文本的内容不为空,使用谓词进行过滤
            NSPredicate *predict=[NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@",myResult];
            resultArr=[listArr filteredArrayUsingPredicate:predict];
        }else{
            //搜索结果为空
            resultArr=nil;
        }
    }else{
        //如果搜索控件为非活动状态
        resultArr=nil;
    }
    //刷新tableView界面
    [self.tableView reloadData];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值