UISearchController使控制器变黑

11

我正在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

搜索功能可以正常工作,表格视图也能够正确更新。

但是!

如果当搜索控制器处于活动状态(即在搜索栏中输入一些文本),我切换到另一个选项卡,然后再返回至搜索选项卡时,会出现一个只有搜索栏的空白屏幕,如下所示:

enter image description here

在这种情况下,我搜索以lar开头的内容,它确实返回了结果并正确显示了它们。但是如果我切换选项卡并返回至搜索选项卡,则会出现这样的空白屏幕。唯一的解决方法是设置_searchController.active = NO,但如果用户想要保持该搜索活动状态,我不能仅仅将其停用。

我确信我漏掉了什么,但由于UISeachController上没有太多可做的事情,我无法弄清楚是什么引起了这个问题...


请问您能否提供一些 Objective-C 代码示例呢?我被同样的问题卡住了。我是 IOS 开发的新手。我有一个用于搜索和主列表的独立视图控制器,这会导致问题吗? - Amith
2个回答

22

尝试使用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

}

1
谢谢,虽然它没有直接帮助我,但它引导我找到了问题所在。我使用了一个带有表格代理的视图控制器,一旦我改用表格视图控制器,问题就得到了解决。 - Nick Ginanto
这一行代码解决了我的问题:definesPresentationContext = true。 - Adam

0
在viewDidLoad方法中编写以下代码:
self.definesPresentationContext = true
searchController.searchResultsUpdater = self
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false searchController.definesPresentationContext = true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接