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未做对比。
网友评论