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

Другие вопросы по тегам