UISearchController的简单应用
2016-03-16 本文已影响234人
Mustard_Buli
@interface ViewController ()<UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating>
@property (nonatomic, strong) NSMutableArray *dataSourceArray;
@property (nonatomic, strong) UITableView *myTableView;
@property (nonatomic, strong) UISearchController *searchController;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self initDataSource];
self.myTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
_myTableView.delegate = self;
_myTableView.dataSource = self;
[self.view addSubview:_myTableView];
//创建searchController
SearchResultViewController *sResultCtrl = [[SearchResultViewController alloc] init];
//告诉这个sCtrl 搜索之后的结果就显示在当前这个控制器上
self.searchController = [[UISearchController alloc] initWithSearchResultsController:sResultCtrl];
//由谁来监听searchbar上面的搜索内容发生变化的事件
_searchController.searchResultsUpdater = self;
//在tableView的头部显示一个searchBar
_myTableView.tableHeaderView = _searchController.searchBar;
//给新的界面提供一个展示的上下文
_searchController.definesPresentationContext = YES;
}
//准备数据源
- (void)initDataSource{
self.dataSourceArray = [NSMutableArray array];
//A1 A2 A3 A4 -Z4
for (int i = 0; i < 26; i++) {
for (int j = 0; j < 4; j++) {
NSString *alpha = [NSString stringWithFormat:@"%c%d",'A'+i, j+1];
[_dataSourceArray addObject:alpha];
}
}
}
#pragma mark -- DataSource&Delegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 26;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 4;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *cellID = @"CellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
}
cell.textLabel.text = [_dataSourceArray objectAtIndex:indexPath.section*4 + indexPath.row];
return cell;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return [NSString stringWithFormat:@"%c", 'A'+(int)section];
}
//索引列表的标题
- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView{
NSMutableArray *titlesArray = [NSMutableArray array];
for (int i = 0; i < 26; i++) {
[titlesArray addObject:[NSString stringWithFormat:@"%c",'A'+i]];
}
return titlesArray;
}
#pragma mark --- searchResultUpdater
//监听searchBar上面内容的变化
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{
//过滤 查找
//定义过滤条件 只要包含搜索的内容就过滤出来
//beginWith endWith like constains
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchController.searchBar.text];
//开始过滤
NSArray *resutls = [_dataSourceArray filteredArrayUsingPredicate:predicate];
//将过滤的内容显示
SearchResultViewController *sResultCtrl = (SearchResultViewController *)_searchController.searchResultsController;
sResultCtrl.dataSourceArray = resutls;
}
@end