0

我有一個UISearchControllerUISearchBarNavigationBarTitleView。當您開始輸入SearchBar時,會出現一個ResultsTableView。在打字時有一個取消按鈕出現在SearchBar旁邊,它正確地取消了TableView。到現在爲止還挺好。iOS UISearchController TableView

場景的主視圖控制器是TableViewController,它連接到TabBarController中的NavigationController

現在,一切工作正常,除了當顯示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 

    } 
} 

回答

1

嘗試把代碼中viewDidDisappear:駁回搜索控制器,這樣的事情:

override func viewDidDisappear(_ animated: Bool) { 
    super.viewDidDisappear(animated)   
    self.searchController.searchResultsController?.dismissViewControllerAnimated(true, completion: nil) 
    self.searchController.searchBar.text = nil 
} 
+0

我想,剛纔......還是一樣的viewDidDisappear方法。 http://s13.postimg.org/hc8k4skzb/Simulator_Screen_Shot_10_Dec_2015_13_18_07.png –

+0

所以,我想它的工作,是吧?你有沒有改變任何其他? – Losiowaty

+0

其實我貼了我所做的,但這也幫助 –

1

好......頗有幾分擺弄周圍我的後能夠解決它。

問題是當切換標籤時viewWillDisappear:viewDidDisappear:不會被調用。

要解決它,我不得不作出一個新的類爲TabBarController並覆蓋didSelectItem:方法調用的PCFeedTableViewController