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