最简单的搜索框的实现

<span style="font-size:14px;">#import "SearchViewController.h"

@interface SearchViewController ()<UITableViewDelegate,UITableViewDataSource,UISearchResultsUpdating>
{
    NSMutableArray *_dataSourceArr;//所有可以搜索到的  cell显示的数据
    NSArray *_visibleArr; //搜索得到的数据
    UITableView *_tableView;
    UISearchController *_searchController;
}

@end

@implementation SearchViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    
//    int a,b = 2;
//    a = b;
//    a= a + 3;
//    NSLog(@"%d%d",a,b);
    
    _tableView = [[UITableView alloc]initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [self.view addSubview:_tableView];
    
    _searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
    _searchController.searchResultsUpdater = self;
    _searchController.dimsBackgroundDuringPresentation = NO;
    [_searchController.searchBar sizeToFit];
    _searchController.hidesNavigationBarDuringPresentation = NO;
    
    _tableView.tableHeaderView = _searchController.searchBar;
    _visibleArr = [NSArray array];
    _dataSourceArr = [NSMutableArray array];
    for (int i = 0; i < 100 ; i ++)
    {
        NSString *str = [NSString stringWithFormat:@"%d",i];
        [_dataSourceArr addObject:str];
    }
   // _visibleArr = _dataSourceArr;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _visibleArr.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if(!cell)
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    
    cell.textLabel.text = _visibleArr[indexPath.row];
    
    return cell;
}

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

    NSString *inputStr = searchController.searchBar.text;
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [c] %@", inputStr];
    _visibleArr = [_dataSourceArr filteredArrayUsingPredicate:predicate];
    [_tableView reloadData];
    
//    NSLog(@"%ld",_dataSourceArr.count);
//    NSLog(@"%ld",_visibleArr.count);

}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    
    _searchController.active = NO;

    [_searchController.searchBar removeFromSuperview];//不移除的话pop回上一个页面的时候searchBar会有短暂的显示
}

- (void)dealloc
{
    //Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UISearchController: 0x7fb6dbfebc10>)
    //如果出现这些,请用下面任意的一种方法
    

    //[_searchController.view removeFromSuperview];
    
    [_searchController loadViewIfNeeded];  //适用于IOS9
}

@end
</span>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值