SearchController + 中英关联搜索

这篇博客介绍如何使用UISearchController结合两个UITableView,一个显示原始数据,另一个显示搜索结果。通过谓词搜索过滤,实现了对包含中文和英文的关键字搜索。同时,文章还展示了UISearchController的相关配置,如背景变暗、模糊效果和导航栏隐藏等。
摘要由CSDN通过智能技术生成


一共有两个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];

    }

    

}

demo 请见百度云  内附带有分区和检索列表的searchcontroller

链接: https://pan.baidu.com/s/1jIQLYYU 密码: qyhf

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值