一共有两个tableview 一个用于显示列表数据 ,,一个用于显示搜索结果的列表数据
下面展示的是部分代码,,,完整的看demo
创建显示所有数据的tableview
self.skTableView =[[UITableView alloc]initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width ,[UIScreen mainScreen].bounds.size.height)];
创建显示搜搜结果的tableview
self.resultTableView =[[UITableView alloc]initWithFrame:CGRectMake(0, 64,[UIScreen mainScreen].bounds.size.width ,[UIScreen mainScreen].bounds.size.height-64)];
self.skTableView.delegate = self;
self.skTableView.dataSource = self;
self.resultTableView.delegate = self;
self.resultTableView.dataSource = self;
//隐藏tableViewCell下划线
// self.skTableView.separatorStyle = UITableViewCellSelectionStyleNone;
//创建UISearchController
self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
//设置代理
self.searchController.delegate= self;
self.searchController.searchResultsUpdater = self;
//包着搜索框外层的颜色
self.searchController.searchBar.barTintColor = [UIColor colorWithRed:0.87 green:0.87 blue:0.87 alpha:1.00];
//提醒字眼
self.searchController.searchBar.placeholder= @"请输入关键字搜索";
//设置UISearchController的显示属性,以下3个属性默认为YES
//搜索时,背景变暗色
self.searchController.dimsBackgroundDuringPresentation = YES;
//搜索时,背景变模糊
self.searchController.obscuresBackgroundDuringPresentation = YES;
//点击搜索的时候,是否隐藏导航栏
self.searchController.hidesNavigationBarDuringPresentation = YES;
self.definesPresentationContext = YES;
//位置
self.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
self.skTableView.tableHeaderView = self.searchController.searchBar;
[self.view addSubview: self.skTableView];
[self.searchController.view addSubview:self.resultTableView];
self.resultTableView.hidden = YES;
#pragma mark - UISearchControllerDelegate代理,可以省略,主要是为了验证打印的顺序
//测试UISearchController的执行过程
- (void)willPresentSearchController:(UISearchController *)searchController
{
NSLog(@"willPresentSearchController");
}
- (void)didPresentSearchController:(UISearchController *)searchController
{
NSLog(@"didPresentSearchController");
// [self.view addSubview:self.searchController.searchBar];
}
- (void)willDismissSearchController:(UISearchController *)searchController
{
NSLog(@"willDismissSearchController");
}
- (void)didDismissSearchController:(UISearchController *)searchController
{
NSLog(@"didDismissSearchController");
}
- (void)presentSearchController:(UISearchController *)searchController
{
NSLog(@"presentSearchController");
}
//谓词搜索过滤 将文件加入工程 导入头文件 复制粘贴下面的代码 涉及到两个数组 self.searchListArry 是搜索结果的数组
/// self.dataListArry 是所有数据的数组
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController {
self.searchListArry = [NSMutableArray array];
if (searchController.searchBar.text.length>0&&![ChineseInclude isIncludeChineseInString:searchController.searchBar.text]) {
for (int i=0; i<self.dataListArry.count; i++) {
if ([ChineseInclude isIncludeChineseInString:self.dataListArry[i]]) {
NSString *tempPinYinStr = [PinYinForObjc chineseConvertToPinYin:self.dataListArry[i]];
NSRange titleResult=[tempPinYinStr rangeOfString:searchController.searchBar.text options:NSCaseInsensitiveSearch];
if (titleResult.length>0) {
if (![self.searchListArry containsObject:self.dataListArry[i]]) {
[self.searchListArry addObject:self.dataListArry[i]];
}
}
NSString *tempPinYinHeadStr = [PinYinForObjc chineseConvertToPinYinHead:self.dataListArry[i]];
NSRange titleHeadResult=[tempPinYinHeadStr rangeOfString:searchController.searchBar.text options:NSCaseInsensitiveSearch];
if (titleHeadResult.length>0) {
if (![self.searchListArry containsObject:self.dataListArry[i]]) {
[self.searchListArry addObject:self.dataListArry[i]];
}
}
}else {
NSRange titleResult=[self.dataListArry[i] rangeOfString:searchController.searchBar.text options:NSCaseInsensitiveSearch];
if (titleResult.length>0) {
if (![self.searchListArry containsObject:self.dataListArry[i]]) {
[self.searchListArry addObject:self.dataListArry[i]];
}
}
}
}
} else if (searchController.searchBar.text.length>0&&[ChineseInclude isIncludeChineseInString:searchController.searchBar.text]) {
for (NSString *tempStr in self.dataListArry) {
NSRange titleResult=[tempStr rangeOfString:searchController.searchBar.text options:NSCaseInsensitiveSearch];
if (titleResult.length>0) {
if (![self.searchListArry containsObject:tempStr]) {
[self.searchListArry addObject:tempStr];
}
}
}
}
if (self.searchListArry.count != 0) {
self.resultTableView.hidden = NO;
[self.resultTableView reloadData];
}else{
self.resultTableView.hidden = YES;
[self.resultTableView reloadData];
}
}