iOS UISearchController TableView
У меня есть UISearchController
с UISearchBar
в NavigationBarTitleView
, Когда вы начинаете вводить в SearchBar
ResultsTableView
появляется. Существует кнопка отмены, которая появляется рядом с SearchBar
во время набора текста, и он правильно отклоняет TableView
, Все идет нормально.
Основной вид Scene Controller - это TableViewController
это связано с NavigationController
который находится в TabBarController
,
Теперь все работает нормально, за исключением того, что когда ResultsTableView
отображается, и вы уходите от этого экрана (через tabBar
) экран становится черным, когда вы возвращаетесь к нему.
Я думаю, что мне нужно уволить resultsTableView
при переходе, чтобы предотвратить это (очень похоже на то, что я делаю, когда вызван переход от результатов), но я не могу заставить его работать.
Вот некоторый код:
class PCFeedTableViewController: UITableViewController, UISearchBarDelegate, UISearchResultsUpdating, UISearchControllerDelegate {
let searchController = UISearchController(searchResultsController: PCSearchTableViewController())
func updateSearchResultsForSearchController(searchController: UISearchController) {
let resultsTable = searchController.searchResultsController as! PCSearchTableViewController
resultsTable.tableView.frame.origin = CGPoint(x: 0, y: 64)
resultsTable.tableView.frame.size.height = self.tableView.frame.height - 113
resultsTable.tableView.tableHeaderView = nil
resultsTable.tableView.contentInset = UIEdgeInsetsZero
resultsTable.tableView.scrollIndicatorInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
resultsTable.parentController = self
resultsTable.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "searchResultCell")
}
...
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.scrollsToTop = true
self.searchController.searchResultsUpdater = self
self.searchController.searchBar.delegate = self
self.searchController.hidesNavigationBarDuringPresentation = false
self.searchController.dimsBackgroundDuringPresentation = false
self.searchController.searchBar.sizeToFit()
self.searchController.searchBar.placeholder = "Search for Movies or TV Shows"
self.searchController.searchBar.searchBarStyle = UISearchBarStyle.Minimal
self.searchController.searchBar.barStyle = UIBarStyle.Black
UILabel.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).textColor = UIColor.lightTextColor()
UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).textColor = UIColor.whiteColor()
self.navigationItem.titleView = searchController.searchBar
}
...
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destinationViewController = segue.destinationViewController as! PCMainDetailsTableViewController
self.searchController.searchResultsController?.dismissViewControllerAnimated(true, completion: nil)
self.searchController.searchBar.text = nil
destinationViewController.title = searchResult.title
destinationViewController.movie = searchResult
}
}
2 ответа
Попробуйте поместить код для отклонения контроллера поиска в viewDidDisappear:
, что-то вроде этого:
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
self.searchController.searchResultsController?.dismissViewControllerAnimated(true, completion: nil)
self.searchController.searchBar.text = nil
}
Ладно... После того, как я немного повозился, я смог это исправить.
Проблема заключалась в том, что viewWillDisappear:
а также viewDidDisappear:
не вызывать при переключении вкладок.
Чтобы исправить это, я должен был сделать новый класс для TabBarController
и переопределить didSelectItem:
метод для вызова viewDidDisappear
метод PCFeedTableViewController