UISearchDisplayController和UISearchBar

用UISearchDisplayController来作为搜索控制器(iOS8以后用UISearchController),以下是写了一个demo,简单的介绍了一下UISearchDisplayController的用法和UISearchBar的用法.

#import "JLROOTViewController.h"

@interface JLROOTViewController ()<UITableViewDataSource,UITableViewDelegate,UISearchDisplayDelegate>

@end

@implementation JLROOTViewController
{
    UITableView *_tabview;
    UISearchBar *_searchbar;// 搜索框
    NSMutableArray *_dataArry;// 数据源
    NSMutableArray *_searchdata;// 搜索数据
    UISearchDisplayController *_SDcv;// 搜索控制器,自带一个tableview
//    UISearchController(ios8.0 later)
}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self createData];
    [self createUI];
}

- (void)createData
{
    _dataArry = [[NSMutableArray alloc] init];
    for (int i= 'A'; i<'Z'; i++) {
        NSMutableArray *smallarray = [[NSMutableArray alloc] init];
        for (int j=0; j <10; j++) {
            NSString *str = [NSString stringWithFormat:@"%c%c%c%c%c",i,arc4random()%26+'A',arc4random()%26+'A',arc4random()%26+'A',arc4random()%26+'A'];
            [smallarray addObject:str];
        }
        [_dataArry addObject:smallarray];
    }
    _searchdata = [[NSMutableArray alloc] init];
}
- (void)createUI
{
    _tabview = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
    _tabview.delegate = self;
    _tabview.dataSource =self;
    [self.view addSubview:_tabview];
    // searchbar
    _searchbar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
    self.navigationItem.titleView = _searchbar;
    _searchbar.barStyle = UIBarStyleBlack;
    _searchbar.keyboardType = UIKeyboardAppearanceAlert;
    _searchbar.placeholder = @"请输入查找内容";
    
    _searchbar.showsBookmarkButton = YES;
    _searchbar.showsSearchResultsButton = YES;
    _searchbar.showsCancelButton = YES;
    
    _SDcv = [[UISearchDisplayController alloc] initWithSearchBar:_searchbar contentsController:self];
    
    // 这两个代理是UISearchDisplayController自带的tableview遵循的tableview的代理
    _SDcv.searchResultsDelegate = self;
    _SDcv.searchResultsDataSource = self;
    
    // 遵循搜索代理
    _SDcv.delegate = self;
    
    // 这个设置是让搜索栏的tab在NavigationBar下显示
    _SDcv.displaysSearchBarInNavigationBar = YES;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    if (tableView == _tabview) {
        return _dataArry.count;
    }
        return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if ([tableView isEqual:_tabview]) {
        return [_dataArry[section] count];
    }else{
        [_searchdata removeAllObjects];
        // 搜索
        for (NSArray *arr in _dataArry) {
            for (NSString *str in arr) {
                // 查找数据源是否有查找的str
                NSRange range = [str rangeOfString:_searchbar.text];
                if (range.location != NSNotFound) {
                    [_searchdata addObject:str];
                }
            }
        }
        return _searchdata.count;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *str = @"cellid";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:str];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:str];
    }
    if (tableView == _tabview) {
         cell.textLabel.text = _dataArry[indexPath.section][indexPath.row];
    }else{
        // searchtab
        cell.textLabel.text = _searchdata[indexPath.row];
    }
    
    return cell;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if (tableView == _tabview) {
        return [NSString stringWithFormat:@"%c组",'A'+(int)section];
    }
    return @"搜索结果";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值