美文网首页
UISearchController在当前界面搜索,点击cell

UISearchController在当前界面搜索,点击cell

作者: 98fb1c598953 | 来源:发表于2017-12-01 17:06 被阅读121次
    self.tableView.tableHeaderView = self.mySearchController.searchBar;
    

    当前控制器的tableView的头视图赋值。

            _searchResultViewController = [[SearchResultViewController alloc]initWithSearchType:SearchResultFriendList];
            self.mySearchController = [[UISearchController alloc] initWithSearchResultsController:_searchResultViewController];
            _mySearchController.dimsBackgroundDuringPresentation = NO;
            [_mySearchController.searchBar sizeToFit];
            _mySearchController.searchBar.delegate = self;
            _mySearchController.delegate = self;
            [_mySearchController.searchBar setPlaceholder:@"搜索"];
            [_mySearchController.searchBar setValue:@"取消" forKey:@"_cancelButtonText"];
            _mySearchController.searchBar.barTintColor = RGB(230, 230, 230);
            _mySearchController.hidesNavigationBarDuringPresentation = YES;
            [_mySearchController.searchBar setBackgroundImage:[UIImage new]];
            _mySearchController.searchBar.backgroundColor = RGB(230, 230, 230);
    

    我们知道,UISearchController初始化的时候,需要将一个UIViewcontroller作为SearchResultsController,用于展示搜索结果的展示。

    - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
        
        NSString *searchText = searchBar.text;
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.userNickname contains [cd] %@ ||SELF.userRemarkname contains [cd] %@ || SELF.telephone contains [cd] %@ ||  SELF.nameLetters contains [cd] %@ || SELF.remarkLetters contains [cd] %@",searchText,searchText,searchText,searchText,searchText];
        _searchResultViewController.searchKeyword = searchBar.text;
        _searchResultViewController.dataArray = [self.miyouViewModel.allContacts filteredArrayUsingPredicate:predicate];
        [_searchResultViewController.tableView reloadData];
    }
    
    -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
        
        [self searchBarSearchButtonClicked:_mySearchController.searchBar];
    }
    

    只要在searchbar有输入的时候,上面的方法就会实现过滤,把搜索结果数组赋值给SearchResultsController中的tableView数据源数组就可以了。

    但是在点击搜索结果时,如果用SearchResultsController中的navigationController去Push的话,是不能成功的。
    只能使用存放SearchResultsController的控制器去Push才能实现。

    另外这里说一个控制器与searchbar布局相关属性,self.definesPresentationContext,这只属性置为NO,会出现搜索激活的时候,searchbar偏移到屏幕外面去了,需要置为YES。重点是self.definesPresentationContext = YES需要写到存放SearchResultsController的控制器去。

    网上大神解释说definesPresentationContext决定当前显示其它controller的controller是否提供context给presentedViewController(modalViewController),如果不,就会找上一级的controller的该值。
    然而还是不知道发生了什么导致搜索框瞬移。

    这是在类似微信通讯录中的searchbar的问题解决方法,模态弹出的searchbar未做对比。

    相关文章

      网友评论

          本文标题:UISearchController在当前界面搜索,点击cell

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