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];
}

效果演示:

原文地址:https://www.cnblogs.com/daxueshan/p/6029166.html