<span style="font-size:14px;">#import "SearchViewController.h"
@interface SearchViewController ()<UITableViewDelegate,UITableViewDataSource,UISearchResultsUpdating>
{
NSMutableArray *_dataSourceArr;//所有可以搜索到的 cell显示的数据
NSArray *_visibleArr; //搜索得到的数据
UITableView *_tableView;
UISearchController *_searchController;
}
@end
@implementation SearchViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// int a,b = 2;
// a = b;
// a= a + 3;
// NSLog(@"%d%d",a,b);
_tableView = [[UITableView alloc]initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
[self.view addSubview:_tableView];
_searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
_searchController.searchResultsUpdater = self;
_searchController.dimsBackgroundDuringPresentation = NO;
[_searchController.searchBar sizeToFit];
_searchController.hidesNavigationBarDuringPresentation = NO;
_tableView.tableHeaderView = _searchController.searchBar;
_visibleArr = [NSArray array];
_dataSourceArr = [NSMutableArray array];
for (int i = 0; i < 100 ; i ++)
{
NSString *str = [NSString stringWithFormat:@"%d",i];
[_dataSourceArr addObject:str];
}
// _visibleArr = _dataSourceArr;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _visibleArr.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(!cell)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
cell.textLabel.text = _visibleArr[indexPath.row];
return cell;
}
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
NSString *inputStr = searchController.searchBar.text;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [c] %@", inputStr];
_visibleArr = [_dataSourceArr filteredArrayUsingPredicate:predicate];
[_tableView reloadData];
// NSLog(@"%ld",_dataSourceArr.count);
// NSLog(@"%ld",_visibleArr.count);
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
_searchController.active = NO;
[_searchController.searchBar removeFromSuperview];//不移除的话pop回上一个页面的时候searchBar会有短暂的显示
}
- (void)dealloc
{
//Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UISearchController: 0x7fb6dbfebc10>)
//如果出现这些,请用下面任意的一种方法
//[_searchController.view removeFromSuperview];
[_searchController loadViewIfNeeded]; //适用于IOS9
}
@end
</span>