帶搜索欄的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];
 */
相關文章
相關標籤/搜索