UISearchController

#import "ViewController.h"

@interface ViewController () <UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating, UISearchControllerDelegate>

{

    UIBarButtonItem *_editeBtn;

    UIBarButtonItem *_finishBtn;

    UITableView *_tableView;

    UISearchBar *_searchBar;

    UILabel * _footerlable;

}

@property (nonatomic, strong) NSMutableArray *dataList;

@property (nonatomic, strong) NSMutableArray *searchList;

@property (strong, nonatomic)  UISearchController *searchController;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    [self setTitle:@"通讯录"];

    [self createBarItem];

    

    self.dataList=[NSMutableArray arrayWithCapacity:100];

    

    //产生100个“数字+三个随机字母”

    for (NSInteger i=0; i<100; i++) {

        [self.dataList addObject:[NSString stringWithFormat:@"%ld%@",(long)i,[self shuffledAlphabet]]];

    }

    

    _tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0,[UIScreen  mainScreen].bounds.size.width ,[UIScreen  mainScreen].bounds.size.height)];

    

    _tableView.delegate = self;

    _tableView.dataSource = self;

    _tableView.separatorStyle = UITableViewCellSelectionStyleNone;

    

    //创建UISearchController

    _searchController = [[UISearchController alloc] initWithSearchResultsController:nil];

    //设置代理

    _searchController.delegate = self;

    _searchController.searchResultsUpdater= self;

    

    //设置UISearchController的显示属性,以下3个属性默认为YES

    //搜索时,背景变暗色

    _searchController.dimsBackgroundDuringPresentation = NO;

    //搜索时,背景变模糊

    _searchController.obscuresBackgroundDuringPresentation = NO;

    //隐藏导航栏

    _searchController.hidesNavigationBarDuringPresentation = NO;

    

    _searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);

    

    // 添加 searchbar 到 headerview

    _tableView.tableHeaderView = self.searchController.searchBar;

    

    [self.view addSubview:_tableView];

}

#pragma mark 创建导航栏按钮

- (void)createBarItem

{

    _editeBtn = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStylePlain target:self action:@selector(clickEdite:)];

    _finishBtn = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStylePlain target:self action:@selector(clickFinish:)];

    self.navigationItem.rightBarButtonItem = _editeBtn;

}

//产生3个随机字母

- (NSString *)shuffledAlphabet {

    

    NSMutableArray * shuffledAlphabet = [NSMutableArray arrayWithArray:@[@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z"]];

    

    NSString *strTest = [[NSString alloc]init];

    for (int i=0; i<3; i++) {

        int x = arc4random() % 25;

        strTest = [NSString stringWithFormat:@"%@%@",strTest,shuffledAlphabet[x]];

    }

    

    return strTest;

    

}

//设置区域的行数

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    if (self.searchController.active) {

        return [self.searchList count];

    }else{

        return [self.dataList count];

    }

}

//返回单元格内容

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *flag=@"cell";

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:flag];

    if (cell==nil) {

        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:flag];

    }

    if (self.searchController.active) {

        [cell.textLabel setText:self.searchList[indexPath.row]];

    }

    else{

        [cell.textLabel setText:self.dataList[indexPath.row]];

    }

    return cell;

}

#pragma mark - UISearchControllerDelegate代理

//测试UISearchController的执行过程

- (void)willPresentSearchController:(UISearchController *)searchController

{

    NSLog(@"willPresentSearchController");

}

- (void)didPresentSearchController:(UISearchController *)searchController

{

    NSLog(@"didPresentSearchController");

}

- (void)willDismissSearchController:(UISearchController *)searchController

{

    NSLog(@"willDismissSearchController");

}

- (void)didDismissSearchController:(UISearchController *)searchController

{

    NSLog(@"didDismissSearchController");

}

- (void)presentSearchController:(UISearchController *)searchController

{

    NSLog(@"presentSearchController");

}

-(void)updateSearchResultsForSearchController:(UISearchController *)searchController {

    

    NSLog(@"updateSearchResultsForSearchController");

    NSString *searchString = [self.searchController.searchBar text];

    NSPredicate *preicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchString];

    if (self.searchList!= nil) {

        [self.searchList removeAllObjects];

    }

    //过滤数据

    self.searchList= [NSMutableArray arrayWithArray:[_dataList filteredArrayUsingPredicate:preicate]];

    //刷新表格

    [_tableView reloadData];

}

#pragma mark 导航栏按钮点击事件

- (void)clickEdite:(UIBarButtonItem *)sender

{

    self.navigationItem.rightBarButtonItem = _finishBtn;

}

- (void)clickFinish:(UIBarButtonItem *)sender

{

    self.navigationItem.rightBarButtonItem = _editeBtn;

}

#pragma mark 懒加载

- (NSMutableArray *)dataList

{

    if (!_dataList) {

        _dataList = [NSMutableArray array];

    }

    return _dataList;

}

- (NSMutableArray *)searchList

{

    if (!_searchList) {

        _searchList = [NSMutableArray array];

    }

    return _searchList;

}

1
原文地址:https://www.cnblogs.com/fantasy3588/p/5389888.html