UISearchController

作者: Mr丶炎 | 来源:发表于2016-05-29 20:49 被阅读379次
search.png

1、系统自带搜索框
2、谓词的使用

使用系统自带搜索框UISearchController, 使用这个协议UISearchResultsUpdating ,dataArray存放原来的数据,searchArray存放过滤后的数据

//
//  ViewController.m
//  Search
//
//  Created by lxy on 16/5/29.
//  Copyright © 2016年 lxy. All rights reserved.
//

#import "ViewController.h"

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

@property (weak, nonatomic) IBOutlet UITableView *tableView;

/** 源数据 */
@property (nonatomic, strong) NSMutableArray *dataArray;

/** 搜索结果数组 */
@property (nonatomic, strong) NSMutableArray *searchArray;

/** 搜索框 */
@property (nonatomic, strong) UISearchController *searchC;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 初始化数据
    [self setupData];
    
    // 创建搜索框架
    [self setupSearchC];
    
    
    
    
}

#pragma mark - 搜索框
- (void)setupSearchC {
    
    _searchC = [[UISearchController alloc] initWithSearchResultsController:nil];
    
    _searchC.searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 50);
    
    // 设置代理
    _searchC.searchResultsUpdater = self;
    
    // 不变灰
//    _searchC.dimsBackgroundDuringPresentation = NO;
    
    self.tableView.tableHeaderView = _searchC.searchBar;
    
}


- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
    
    // 获取搜索框里输入的内容
    NSString *str = searchController.searchBar.text;
    NSLog(@"%@", str);
    
    // 过滤条件 [c] 不区分大小写 * 通配符
    NSString *p = [NSString stringWithFormat:@"SELF LIKE[c] '*%@*'", str];
    
    // 创建谓词
    NSPredicate *predicate = [NSPredicate predicateWithFormat:p];
    
    // 清空搜索数组
    [_searchArray removeAllObjects];
    
    self.searchArray = [NSMutableArray arrayWithArray:[_dataArray filteredArrayUsingPredicate:predicate]];
    
    
    
    [self.tableView reloadData];
}

#pragma mark - 初始化数据
- (void)setupData {
    // 获取数据
    NSString *path = [[NSBundle mainBundle] pathForResource:@"search" ofType:@"plist"];
    
    _dataArray = [NSMutableArray arrayWithContentsOfFile:path];
}

#pragma mark - 数据源
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (_searchC.active) {
        
        return _searchArray.count;
    } else {
        
        return  _dataArray.count;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    static NSString *ID = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    
    if (_searchC.active) {
        cell.textLabel.text = _searchArray[indexPath.row];
    } else {
        cell.textLabel.text = _dataArray[indexPath.row];
    }
    return cell;
}

// 返回cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 64;
}

@end

相关文章

网友评论

    本文标题:UISearchController

    本文链接:https://www.haomeiwen.com/subject/chuqdttx.html