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