UISearchController使控制器变黑

时间:2015-02-23 14:24:38

标签: ios ios8 uisearchbar uisearchcontroller

我在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正确更新等等。

但是!

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

enter image description here

在这种情况下,我搜索以lar开头的内容,它确实返回结果并正确显示。但如果我切换标签,然后返回搜索标签,我会得到一个这样的空白屏幕。控制器返回其原始状态的唯一方法是{I} _searchController.active = NO。但是,如果用户希望保持该搜索处于活动状态,我就不能将其停用。

我确信我遗漏了一些东西,但由于在UISeachController中没什么可做的,我无法弄清楚是什么导致了这个......

2 个答案:

答案 0 :(得分:21)

尝试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 :(得分:0)

在viewDidLoad mehtod中编写以下代码。

self.definesPresentationContext = true

searchController.searchResultsUpdater = self

searchController.searchBar.delegate = self

searchController.dimsBackgroundDuringPresentation = false searchController.definesPresentationContext = true