注意一定要将searchController设置为成员属性,不然会达不到想要的结果
要掌握searchController 建议查询苹果的官方文档
@interface LRMessageTableViewController ()<UISearchResultsUpdating,UISearchBarDelegate>
@property(nonatomic,strong)UISearchController *messageSearchController;
@property(nonatomic,strong)NSMutableArray *visableArray;
@property(nonatomic,strong)NSMutableArray *dataSourceArray;
@property(nonatomic,assign)BOOL clickCancelSearchBar;
@end
@implementation LRMessageTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self settingSearchController];
self.dataSourceArray = [NSMutableArray array];
for (int i = 0; i < 26; i++)
{
NSString *str = [NSString stringWithFormat:@"%d%c",i,'A'+i];
[self.dataSourceArray addObject:str];
}
self.visableArray = self.dataSourceArray;
}
- (void)settingSearchController
{
self.messageSearchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.messageSearchController.searchResultsUpdater = self;
//设置searchBar的背景图片
[self.messageSearchController.searchBar setBackgroundImage:[UIImage imageNamed:@"searchbar_bg"]];
//设置searchBar的键盘输入图片
self.messageSearchController.dimsBackgroundDuringPresentation = NO;
[self.messageSearchController.searchBar setSearchFieldBackgroundImage:[UIImage imageNamed:@"searchbar_inputbox"] forState:UIControlStateNormal];
//设置icon图片
// self.messageSearchController.searchBar.showsBookmarkButton = YES;
[self.messageSearchController.searchBar setImage:[UIImage imageNamed:@"searchbar_icon_search"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];
//设置searchBar的代理
self.messageSearchController.searchBar.delegate = self;
self.tableView.tableHeaderView = self.messageSearchController.searchBar;
}
#pragma mark - Table view data source
//- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// NSLog(@"numberOfSectionsInTableView");
// return 1;
//}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return _visableArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"message";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
}
cell.textLabel.text = self.visableArray[indexPath.row];
return cell;
}
#pragma mark-UISearchResultsUpdating 代理方法
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
NSLog(@"updateSearchResultsForSearchController");
NSString *filterString = searchController.searchBar.text;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [c] %@", filterString];
if (self.clickCancelSearchBar) {
self.visableArray = self.dataSourceArray;
self.clickCancelSearchBar = NO;
}else{
self.visableArray = [NSMutableArray arrayWithArray:[self.dataSourceArray filteredArrayUsingPredicate:predicate]];
}
[self.tableView reloadData];
}
#pragma mark - searchBar代理
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
self.clickCancelSearchBar = YES;
}