UISearchController делает контроллер черным


Я использую UISearchController в iOS 8 со следующим intializaiton в 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 обновляется должным образом и т. д.

Но!

Если я переключаю вкладки в то время как searchcontroller активен (просто нажав на строку поиска или с некоторым текстом) на другую вкладку, а затем возвращаюсь к вкладке поиска, я получаю пустой экран с только строка поиска, Вот так

Введите описание изображения здесь

В этом случае я ищу вещи, которые начинаются с lar, которые действительно возвращают результаты и отображают их правильно. Но если я переключаю вкладки и возвращаюсь на вкладку поиска, я получаю пустой экран, как это. Единственный способ вернуть контроллер в исходное состояние - это сделать _searchController.active = NO. Но если пользователь хочет сохранить этот поиск активным, я не могу просто отключить его.

Я уверен, что мне чего-то не хватает, но так как там не так уж много работы. UISeachController, я не могу понять, что вызывает это..

2 10

2 ответа:

Попробуйте себя.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

}

Напишите приведенный ниже код в viewDidLoad mehtod.

Самость.definesPresentationContext = true

SearchController.searchResultsUpdater = self

SearchController.панель поиска.делегат = self

SearchController.dimsBackgroundDuringPresentation = ложь searchController.definesPresentationContext = true