实现搜索功能的方法有很多种,这里说一下系统原生的方法,超级简单。下面看一下效果:
首先我们要创建一个UITableViewController用来展示数据,然后我们再实例化两个控制器
@interface JYTableViewController()<UISearchControllerDelegate,UISearchResultsUpdating>
//查询控制器
@property(nonatomic,strong)UISearchController*searchController;
//查询结果控制器
@property(nonatomic,strong)JYResultTableViewController*resultsController;
//展示数据的数组
@property(nonatomic,strong)NSMutableArray*dataArray;
@end
然后懒加载数组,并设置数局
//懒加载要展示数据的数组
-(NSArray*)dataArray{
if(!_dataArray) {
_dataArray= [NSMutableArrayarrayWithCapacity:20];
for(inti =0; i <20; i++) {
[_dataArrayaddObject:[NSStringstringWithFormat:@"%@ --> %d",@"BlackSky",i]];
}
}
return_dataArray;
}
由于代码上的注释很全,这里就不一一解释了
- (void)viewDidLoad {
[superviewDidLoad];
//实例化查询结果控制器,(这里一定是要先实例化查询结果控制器,创建搜错控制器的时候是没有结果的)
self.resultsController= [[JYResultTableViewControlleralloc]init];
//实例化搜索控制器
self.searchController= [[UISearchControlleralloc]initWithSearchResultsController:_resultsController];
//设置搜索框为tableView的头视图
self.tableView.tableHeaderView=self.searchController.searchBar;
//设置查询代理
self.searchController.delegate=self;
//注意不要忘记设置查询更新结果的代理,这个代理的名字不按常规出牌
self.searchController.searchResultsUpdater=self;
}
#pragma mark - Table view data source
//返回组数
- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView {
return1;
}
//返回每组的行数
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {
returnself.dataArray.count;
}
//返回cell
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
UITableViewCell*cell = [tableViewdequeueReusableCellWithIdentifier:reuseIdentifier];
if(!cell) {
cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:reuseIdentifier];
}
cell.textLabel.text=self.dataArray[indexPath.row];
returncell;
}
//实现查询结果处理的代理方法,注:这是一个必须实现的方法。
- (void)updateSearchResultsForSearchController:(UISearchController*)searchController{
//设置谓词,谓词就是根据输入的内容去匹配数据,并返回一个查询的结果
NSPredicate*predicate = [NSPredicatepredicateWithFormat:@"SELF CONTAINS[c] %@",self.searchController.searchBar.text];
//设置查询结果界面要显示的数据
//self.resultsController.serachResults = [NSMutableArray arrayWithArray:[self.dataArray filteredArrayUsingPredicate:predicate]];
NSMutableArray*array = [NSMutableArrayarrayWithArray:[self.dataArrayfilteredArrayUsingPredicate:predicate]];
self.resultsController.serachResults= array;
//不要忘记刷新结果数据界面
[self.resultsController.tableViewreloadData];
}
// 最后就是把数据展示在查询结果的UITableViewController里就OK了。