UISearchController 使控制器变黑

Posted

技术标签:

【中文标题】UISearchController 使控制器变黑【英文标题】:UISearchController makes the controller black 【发布时间】:2015-02-23 14:24:38 【问题描述】:

我在 ios 8 中使用 UISearchController,并在嵌入选项卡控制器的视图控制器的 viewDidLoad 中进行以下初始化

 _searchController = [[UISearchController alloc] initWithSearchResultsController:nil];

    _searchBar = _searchController.searchBar;
    [_searchController.searchBar sizeToFit];
    _searchController.searchBar.delegate = self;
   _searchController.searchResultsUpdater = self;
    _searchController.dimsBackgroundDuringPresentation = NO;
    _searchController.hidesNavigationBarDuringPresentation  = NO;
    self.definesPresentationContext = NO;
    _shopsTable.tableHeaderView = _searchController.searchBar;

我已经实现了

- (void) updateSearchResultsForSearchController:(UISearchController *)searchController(void)filterContentForSearchText:(NSString *)searchText

搜索正常,tableview 得到正确更新,等等。

但是!

如果我在搜索控制器处于活动状态时切换选项卡(只需点击搜索栏或使用一些文本)到另一个选项卡,然后返回搜索选项卡,我会得到一个只有搜索栏的空白屏幕,像这样

在这种情况下,我搜索以lar 开头的内容,它确实返回了结果并正确显示了它们。但是,如果我切换选项卡并返回到搜索选项卡,我会得到一个像这样的空白屏幕。控制器返回其原始状态的唯一方法是我执行_searchController.active = NO。但是,如果用户想要保持该搜索处于活动状态,我不能只是停用它。

我确定我遗漏了一些东西,但由于在 UISeachController 中没有什么可做的,我无法弄清楚是什么原因造成的......

【问题讨论】:

您能否提供示例目标 c 代码,我遇到了同样的问题?我对IOS开发非常陌生。我有单独的视图控制器用于搜索以及主列表。这是导致问题的原因吗? 【参考方案1】:

试试 self.definesPresentationContext = YES;而不是NO。以下是我设置 UISearchController 的方法,但我之前没有在 UITabBarController 中这样做过。

func setupSearchController() 
    let resultsController = UIStoryboard(name: "ATPageTableViewController", bundle: nil).instantiateViewControllerWithIdentifier("ATPageTableSearchResultsViewController") as! ATPageTableSearchResultsViewController
    searchController = UISearchController(searchResultsController: resultsController)
    searchController.delegate = self
    resultsController.delegate = self
    resultsController.cellIdentifier = ATDataSetItemTableViewCellIdentifier;
    resultsController.table = self.table!
    searchController.searchBar.sizeToFit()
    self.tableView.tableHeaderView = searchController.searchBar
    searchController.searchResultsUpdater = self
    searchController.searchBar.delegate = self
    definesPresentationContext = true


【讨论】:

谢谢,它没有直接帮助我,但它导致了我的问题。我使用了一个带有表委托的视图控制器,一旦我切换到一个表视图控制器,问题就得到了解决.. 这一行为我做了:definePresentationContext = true【参考方案2】:

在 viewDidLoad 方法中编写以下代码。

self.definesPresentationContext = true

searchController.searchResultsUpdater = 自我

searchController.searchBar.delegate = self

searchController.dimsBackgroundDuringPresentation = false searchController.definesPresentationContext = true

【讨论】:

以上是关于UISearchController 使控制器变黑的主要内容,如果未能解决你的问题,请参考以下文章

模态视图控制器使背景变黑

如何使用 UISearchController 使导航栏保持可见?

聚焦时如何调整 UISearchController.searchBar 的大小问题?

SceneKit - 为啥添加聚光灯会使地板变黑?

如何使 UISearchController() 默认隐藏?

使 UISearchController 搜索栏自动激活