带搜索栏的tableview

#import "ViewController.h"

@interface ViewController ()<UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate,UISearchControllerDelegate,UISearchResultsUpdating>
@property (nonatomic, strong) UITableView *myTableView;
@property (nonatomic, strong) NSMutableArray *visableArray;
@property (nonatomic, strong) NSMutableArray *filterArray;
@property (nonatomic, strong) NSMutableArray *dataSourceArray;
@property (nonatomic, strong) UISearchController *mySearchController;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
     [self initial];
}
- (void)initial{
    self.dataSourceArray = [NSMutableArray array];
    self.filterArray = [NSMutableArray array];
    for (int i = 0; i < 26; i++) {
        for (int j = 0; j < 4; j++) {
            NSString *str = [NSString stringWithFormat:@"%c%d", 'A'+i, j];
            [self.dataSourceArray addObject:str];
        }
    }
    
    self.visableArray = self.dataSourceArray;
    
    self.myTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
    _myTableView.delegate = self;
    _myTableView.dataSource = self;
    [self.view addSubview:_myTableView];
    //nil为和当前视图总用一个视图
    self.mySearchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    //searchResultsUpdater:设置显示搜索结果的控制器
    _mySearchController.searchResultsUpdater = self;
    
    /**
     *   @author aiqing, 17-11-19 16:11:58
     *若是不须要,刻意再建立一个如
     UITableViewController *tableVC = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
     
     tableVC.tableView.delegate = self;
     tableVC.tableView.dataSource = self;
     [tableVC.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
     self.searchVC = [[UISearchController alloc] initWithSearchResultsController:tableVC];
     *
     */
    
    //dimsBackgroundDuringPresentation设置开始搜索时背景显示与否
    _mySearchController.dimsBackgroundDuringPresentation = YES;
    //[searchBar sizeToFit]:设置searchBar位置自适应
    [_mySearchController.searchBar sizeToFit];
    //.设置searchBar为UITableView的头部视图
    self.myTableView.tableHeaderView = self.mySearchController.searchBar;
    
    //加上这个self.searchController.hidesNavigationBarDuringPresentation = NO;就不会自动隐藏导航了
    
   // [self willPresentSearchController:self.mySearchController];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if (!_visableArray || _visableArray.count == 0) {
        _visableArray = _dataSourceArray;
    }
    return _visableArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];
    
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"];
    }
    
    cell.textLabel.text = [_visableArray objectAtIndex:indexPath.row];
    
    return cell;
}
/**
 *   @author aiqing, 17-11-19 15:11:55
 *
 *   搜索功能的最重要一步了
 *
 *   @param searchController 匹配搜索结果
 */
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{
    NSString *filterString = searchController.searchBar.text;
    
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [c] %@", filterString];
    
    self.visableArray = [NSMutableArray arrayWithArray:[self.dataSourceArray filteredArrayUsingPredicate:predicate]];
    
    [self.myTableView reloadData];
    /**
     *   @author aiqing, 17-11-19 16:11:48
     *
     *   接上面自定义searchbar添加表视图
     *
     *   @param UITableViewController 从新加载数据源
     *
     *   @return 新的表示图
     */
    //最后搜索数据源变了  ->让搜索控制器 内部的结果视图控制器的tableView的刷新
    //UITableViewController *tableVC = (UITableViewController *)searchController.searchResultsController;
    //[tableVC.tableView reloadData];
}
- (void)willPresentSearchController:(UISearchController *)searchController {
    NSLog(@"searchController 将要 显示");
    
}
- (void)didPresentSearchController:(UISearchController *)searchController {
    NSLog(@"searchController 已经 显示");
}
- (void)willDismissSearchController:(UISearchController *)searchController {
    NSLog(@"searchController 将要 消失");
}

- (void)didDismissSearchController:(UISearchController *)searchController {
    NSLog(@"searchController 已经 消失");
}
/**
 *   @author aiqing, 17-11-19 16:11:04
 *
 *   !!若是须要页面跳转
 在进行页面跳转的时候要注意如今有两个视图呀须要区分开
 UIViewController *vc = nil;
 //self.presentedViewController获取已经模态跳转上册的视图控制器,若是dismiss 以后 这个值会变成nil
 if (self.presentedViewController) {
 //判断一下 当前视图控制器有没有 模态跳转 的视图,若是有 那么 作另一个模态跳转的时候 应该用 上一个已经模态跳转的控制器进行 模态跳转下一个
 vc = self.presentedViewController;
 }else {
 vc = self;
 }
 //模态跳转
 [vc presentViewController:alert animated:YES completion:nil];
 */
相关文章
相关标签/搜索