• UISearchController 搜索


    UISearchController实现搜索

    通过 UISearchController 实现 UISearchResultsUpdating 这个委托实现上面的效果;

    视图中中需要声明UISearchResultsUpdating:

    @interface ViewController : UITableViewController<UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate,UISearchResultsUpdating>
    
    
    @end

    属性声明:

    @property (nonatomic, strong) UISearchController *searchController;

    需要自己初始化一下UISearchController:

    _searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    	_searchController.searchResultsUpdater = self;
    	_searchController.dimsBackgroundDuringPresentation = NO;
    	_searchController.hidesNavigationBarDuringPresentation = NO;
    	_searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
    	self.tableView.tableHeaderView = self.searchController.searchBar;
    

    之前是通过判断搜索时候的TableView,不过现在直接使用self.searchController.active进行判断即可,也就是UISearchController的active属性:

    //设置区域的行数
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    			if (self.searchController.active) {
    				return [self.searchList count];
    			}else{
    				return [self.dataList count];
    			}
    }
    //返回单元格内容
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    	static NSString *flag=@"cellFlag";
    	UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:flag];
    	if (cell==nil) {
    		cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:flag];
    	}
    	if (self.searchController.active) {
    		[cell.textLabel setText:self.searchList[indexPath.row]];
    	}
    	else{
    		[cell.textLabel setText:self.dataList[indexPath.row]];
    	}
    	return cell;
    }
    

    具体调用的时候使用的方法也发生了改变,这个时候使用updateSearchResultsForSearchController进行结果过滤:

    -(void)updateSearchResultsForSearchController:(UISearchController *)searchController {
    	NSString *searchString = [self.searchController.searchBar text];
    	NSPredicate *preicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchString];
    	if (self.searchList!= nil) {
    		[self.searchList removeAllObjects];
    	}
    	//过滤数据
    	self.searchList= [NSMutableArray arrayWithArray:[_dataList filteredArrayUsingPredicate:preicate]];
    	//刷新表格
    	[self.tableView reloadData];
    }
    

    效果演示:

  • 相关阅读:
    我认知的javascript之函数调用
    table 的宽度设置无效
    【转】微信读书排版引擎自动化测试方案
    RocksDB原理及应用
    ElasticSearch 架构及应用简介
    芝加哥大学论文写作指南 简述
    python 常用模块
    Flask-SQLAlchemy安装及设置
    selenium设置程序失败后重启
    获取临时IP加入临时列表使用
  • 原文地址:https://www.cnblogs.com/daxueshan/p/6029166.html
Copyright © 2020-2023  润新知