ViewWillDisappear没有被称为searchcontroller

当我在search中,然后切换UItabs时,ViewWillDisappear不会被调用。 任何想法为什么ViewWillDisappear不会被调用,当我筛选结果显示和切换标签?

func updateSearchResultsForSearchController(searchController: UISearchController) { if self.searchController?.searchBar.text.lengthOfBytesUsingEncoding(NSUTF32StringEncoding) > 0 { if let results = self.results { results.removeAllObjects() } else { results = NSMutableArray(capacity: MyVariables.dictionary.keys.array.count) } let searchBarText = self.searchController!.searchBar.text let predicate = NSPredicate(block: { (city: AnyObject!, b: [NSObject : AnyObject]!) -> Bool in var range: NSRange = NSMakeRange(0, 0) if city is NSString { range = city.rangeOfString(searchBarText, options: NSStringCompareOptions.CaseInsensitiveSearch) } return range.location != NSNotFound }) // Get results from predicate and add them to the appropriate array. let filteredArray = (MyVariables.dictionary.keys.array as NSArray).filteredArrayUsingPredicate(predicate) self.results?.addObjectsFromArray(filteredArray) // Reload a table with results. self.searchResultsController?.tableView.reloadData() } } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(self.identifier) as! UITableViewCell var text: String? var imgtext:AnyObject? if tableView == self.searchResultsController?.tableView { if let results = self.results { text = self.results!.objectAtIndex(indexPath.row) as? String imgtext = MyVariables.dictionary[text!] let decodedData = NSData(base64EncodedString: imgtext! as! String, options: NSDataBase64DecodingOptions(rawValue: 0) ) var decodedimage = UIImage(data: decodedData!) cell.imageView?.image = decodedimage } } else { text = MyVariables.dictionary.keys.array[indexPath.row] as String } cell.textLabel!.text = text return cell } 

在负载

  override func viewDidLoad() { super.viewDidLoad() let resultsTableView = UITableView(frame: self.tableView.frame) self.searchResultsController = UITableViewController() self.searchResultsController?.tableView = resultsTableView self.searchResultsController?.tableView.dataSource = self self.searchResultsController?.tableView.delegate = self // Register cell class for the identifier. self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: self.identifier) self.searchResultsController?.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: self.identifier) self.searchController = UISearchController(searchResultsController: self.searchResultsController!) self.searchController?.searchResultsUpdater = self self.searchController?.delegate = self self.searchController?.searchBar.sizeToFit() self.searchController?.hidesNavigationBarDuringPresentation = false; self.tableView.tableHeaderView = self.searchController?.searchBar self.definesPresentationContext = true } 

有同样的问题。 viewWillDisappear不在UITableViewController上调用,但在UISearchController调用。

所以我分类了UISearchController并覆盖了viewWillDisappear方法。 在我的情况下,我只需要停用search控制器。

 class SearchController: UISearchController { override func viewWillDisappear(_ animated: Bool) { // to avoid black screen when switching tabs while searching isActive = false } } 

我认为它与Xcode的问题。 尝试closures它,并再次打开该项目,并尝试再次运行