如何在 UITableView 中显示/隐藏 UISearchController searchBar?
Posted
技术标签:
【中文标题】如何在 UITableView 中显示/隐藏 UISearchController searchBar?【英文标题】:How to show/hide UISearchController searchBar in UITableView? 【发布时间】:2016-02-10 20:07:08 【问题描述】:在我的应用中,我有以下设置:
UIViewController UITableView 作为子视图tableView 有一个 UISearchController 和一个搜索栏是一个表头视图
_tableView.tableHeaderView = _searchController.searchBar;
我想要实现的是:
出现此屏幕时,搜索栏不存在 点击某个按钮(例如导航控制器的右键)搜索栏出现(可能从顶部开始动画) 再次点击该按钮,搜索栏将隐藏当搜索栏没有显示表格时,看起来该栏从来没有出现过(没有空的标题单元格或类似的东西)
非常感谢任何形式的帮助!
【问题讨论】:
【参考方案1】:我自己想出了这个,也许不是最佳解决方案,但如果有人有更好的想法,我很乐意接受作为答案。
-(void)searchButtonDidTap:(UIButton*)aButton
if (!_searchController)
_searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
_searchController.searchResultsUpdater = self;
[_searchController.searchBar sizeToFit];
_tableView.tableHeaderView = _searchController.searchBar;
_searchController.delegate = self;
_searchController.dimsBackgroundDuringPresentation = NO;
self.definesPresentationContext = YES;
_searchController.active = NO;
_searchController.searchResultsUpdater = self;
_searchController.dimsBackgroundDuringPresentation = NO;
self.definesPresentationContext = YES;
_tableView.tableHeaderView = _searchController.searchBar;
_searchController.searchBar.delegate = self;
else
_searchController.active = NO;
[_searchController removeFromParentViewController];
_searchController = nil;
_tableView.tableHeaderView = nil;
[_tableView reloadData];
【讨论】:
【参考方案2】:有很多方法可以做到这一点,但我会做如下的事情:
更新 viewForHeaderInSection 方法以仅在名为 _showHeader 的新类属性为 true 时显示标题:
if(_showHeader)
// insert code for showing the header:
// return HeaderCell;
else
return nil;
当用户单击按钮显示表头时,设置一些变量并在 tableView 上调用 reloadData:
_showHeader = YES;
[_tableView reloadData];
【讨论】:
以上是关于如何在 UITableView 中显示/隐藏 UISearchController searchBar?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UITableView 中显示/隐藏 UISearchController searchBar?
如何以普通样式隐藏在 UITableView 中显示的空 UITableViewCells - IOS?