【问题标题】:How to show/hide UISearchController searchBar in UITableView?如何在 UITableView 中显示/隐藏 UISearchController searchBar?
【发布时间】:2016-02-10 20:07:08
【问题描述】:

在我的应用中,我有以下设置:

  • UIViewController
  • UITableView 作为子视图
  • tableView 有一个 UISearchController 和一个搜索栏是一个表头视图

    _tableView.tableHeaderView = _searchController.searchBar;

我想要实现的是:

  • 出现此屏幕时,搜索栏不存在
  • 点击某个按钮(例如导航控制器的右键)搜索栏出现(可能从顶部开始动画)
  • 再次点击该按钮,搜索栏将隐藏

当搜索栏没有显示表格时,看起来该栏从来没有出现过(没有空的标题单元格或类似的东西)

非常感谢任何形式的帮助!

【问题讨论】:

    标签: ios objective-c uitableview uisearchbar uisearchcontroller


    【解决方案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】:

      有很多方法可以做到这一点,但我会做如下的事情:

      1. 更新 viewForHeaderInSection 方法以仅在名为 _showHeader 的新类属性为 true 时显示标题:

        if(_showHeader) { // insert code for showing the header: // return HeaderCell; } else { return nil; }

      2. 当用户单击按钮显示表头时,设置一些变量并在 tableView 上调用 reloadData:

        _showHeader = YES; [_tableView reloadData];

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多