SearchController + 中英关联搜索

来源:互联网 发布:天财商龙餐饮软件下载 编辑:程序博客网 时间:2024/05/19 03:20


一共有两个tableview 一个用于显示列表数据 ,,一个用于显示搜索结果的列表数据






下面展示的是部分代码,,,完整的看demo

    //// 创建显示所有数据的tableview

 self.skTableView =[[UITableViewalloc]initWithFrame:CGRectMake(0,0,[UIScreen mainScreen].bounds.size.width ,[UIScreen mainScreen].bounds.size.height)];

   //// 创建显示搜搜结果的tableview

    self.resultTableView =[[UITableViewalloc]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 = [[UISearchControlleralloc]initWithSearchResultsController:nil];

    //设置代理

    self.searchController.delegate=self;

    self.searchController.searchResultsUpdater = self;

    

    //包着搜索框外层的颜色

    self.searchController.searchBar.barTintColor = [UIColorcolorWithRed:0.87green:0.87blue:0.87alpha: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.viewaddSubview:self.skTableView];   

    [self.searchController.viewaddSubview: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 = [NSMutableArrayarray];

    if (searchController.searchBar.text.length>0&&![ChineseIncludeisIncludeChineseInString:searchController.searchBar.text]) {

        for (int i=0; i<self.dataListArry.count; i++) {

            if ([ChineseIncludeisIncludeChineseInString:self.dataListArry[i]]) {

                NSString *tempPinYinStr = [PinYinForObjcchineseConvertToPinYin:self.dataListArry[i]];

                NSRange titleResult=[tempPinYinStrrangeOfString:searchController.searchBar.textoptions:NSCaseInsensitiveSearch];

                if (titleResult.length>0) {

                    if (![self.searchListArrycontainsObject:self.dataListArry[i]]) {

                        [self.searchListArryaddObject:self.dataListArry[i]];

                    }

                }

                NSString *tempPinYinHeadStr = [PinYinForObjcchineseConvertToPinYinHead:self.dataListArry[i]];

                NSRange titleHeadResult=[tempPinYinHeadStrrangeOfString:searchController.searchBar.textoptions:NSCaseInsensitiveSearch];

                if (titleHeadResult.length>0) {

                    if (![self.searchListArrycontainsObject:self.dataListArry[i]]) {

                        [self.searchListArryaddObject:self.dataListArry[i]];

                    }

                }

            }else {

                NSRange titleResult=[self.dataListArry[i]rangeOfString:searchController.searchBar.textoptions:NSCaseInsensitiveSearch];

                if (titleResult.length>0) {

                    if (![self.searchListArrycontainsObject:self.dataListArry[i]]) {

                        [self.searchListArryaddObject:self.dataListArry[i]];

                    }

                }

            }

        }

    } elseif (searchController.searchBar.text.length>0&&[ChineseIncludeisIncludeChineseInString:searchController.searchBar.text]) {

        for (NSString *tempStrin self.dataListArry) {

            NSRange titleResult=[tempStrrangeOfString:searchController.searchBar.textoptions:NSCaseInsensitiveSearch];

            if (titleResult.length>0) {

                if (![self.searchListArrycontainsObject:tempStr]) {

                    [self.searchListArryaddObject:tempStr];

                }

            }

        }

    }

    if (self.searchListArry.count != 0) {

        self.resultTableView.hidden = NO;

        [self.resultTableViewreloadData];

    }else{

        self.resultTableView.hidden = YES;

        [self.resultTableViewreloadData];

    }

    

}

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

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

原创粉丝点击