如何在 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?

如何在动态 uitableview 中隐藏部分及其行

如何向右滑动隐藏 UITableView 中的删除按钮?

在 UITableView 中,如何在隐藏行后关闭行的底部边框?

在 UITableView 中隐藏/显示单元格?