#import "RootViewController.h"
//编辑搜索框需要遵守两个协议:
//UISearchResultsUpdating: 搜索到数据时的触发
//UISearchControllerDelegate:搜索的格式的触发
@interfaceRootViewController ()
{
UITableView *_tabView;
NSMutableArray *_dataArray; //存储未搜索的数据
UISearchController *_search; //搜索控制器的对象声明
NSMutableArray *_resultArray; //存储搜索时的数据
BOOL_isSearch; //判断是否进行搜索的开关
//YES, 显示搜索时的数据
//NO,显示未搜索的数据
}
@end
@implementationRootViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view.
_tabView = [[UITableView alloc] initWithFrame:self.view.bounds];
_tabView.dataSource =self;
_tabView.delegate =self;
[self.view addSubview:_tabView];
_dataArray = [[NSMutableArray alloc] init];
for(inti=0;i<30;i++)
{
if(i%2){
[_dataArray addObject:[NSString stringWithFormat:@"基友%d",i]];
}else{
[_dataArray addObject:[NSString stringWithFormat:@"闺蜜%d",i]];
}
}
[selfcreateSeachControl]; //创建搜索控制器
}
-(void)createSeachControl
{
//实例化搜索控制器对象,nil代表在当前类中使用
_search = [[UISearchController alloc] initWithSearchResultsController:nil];
//是否在搜索的时候使底色变暗
_search.dimsBackgroundDuringPresentation =YES;
//设置两个代理对象
_search.delegate =self; //--UISearchControllerDelegate的代理
_search.searchResultsUpdater =self;
//UISearchBar---用于设置搜索控制器的属性
//UIView根据自己的内容来变化Frame的大小
[_search.searchBar sizeToFit];
//设置搜索框提示文字
_search.searchBar.placeholder =@"请输入文字";
//设置搜索框的颜色
_search.searchBar.barTintColor = [UIColor redColor];
//搜索控制器管理搜索搜索框
//将搜索框放到表头中
_tabView.tableHeaderView = _search.searchBar;
//初始化存储搜索数据的数组
_resultArray = [[NSMutableArray alloc] init];
}
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section;
{
if(_isSearch){ //显示搜索时的行数
return _resultArray.count;
}
return _dataArray.count;
}
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseID"];
if(cell ==nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"reuseID"];
}
if(_isSearch)
{ //进行搜索,则显示搜索的数据
cell.textLabel.text=_resultArray[indexPath.row];
}else{
//没有搜索,显示原始数据
cell.textLabel.text=_dataArray[indexPath.row];
}
returncell;
}
//遵守搜索协议必须实现的方法--搜索时,触发更新的方法
- (void)updateSearchResultsForSearchController:(UISearchController*)searchController
{
_isSearch = YES; //改变开关状态为YES
//触发更新前,先清除搜索存储的数组
[_resultArray removeAllObjects];
//循环在原始数组中取出数据与搜索框的做匹配,匹配上再存储到_resultArray
for(NSString*stringin_dataArray) {
//判断搜索框的内容是否在string范围
NSRangerange = [stringrangeOfString:searchController.searchBar.text];
//判断搜索的内容匹配上了,那么进行存储
if(range.location!=NSNotFound)
{
[_resultArrayaddObject:string];
}
}
[_tabView reloadData]; //搜索时,重新加载协议
}
- (void)didDismissSearchController:(UISearchController*)searchController
{
_isSearch = NO; //退出搜索时,状态为NO
[_tabViewreloadData]; //退出后重新加载协议
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end