UISearchController 出现在 swift 的 nextView 中

UISearchController is appearing into nextView with swift

我已经以编程方式在我的 UITableViewController 中实现了一个简单的 UISearchController。下面是我的完整代码:

import UIKit

class TableViewController: UITableViewController, UISearchResultsUpdating {

    let appleProducts = ["Mac","iPhone","Apple Watch","iPad"]
    var filteredAppleProducts = [String]()
    var resultSearchController = UISearchController()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.resultSearchController = UISearchController(searchResultsController: nil)
        self.resultSearchController.searchResultsUpdater = self
        self.resultSearchController.dimsBackgroundDuringPresentation = false
        self.resultSearchController.searchBar.sizeToFit()

        self.tableView.tableHeaderView = self.resultSearchController.searchBar

        self.tableView.reloadData()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        if (self.resultSearchController.active){
            return self.filteredAppleProducts.count
        }else{
            return self.appleProducts.count
        }
    }


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell?

        if (self.resultSearchController.active)
        {
            cell!.textLabel?.text = self.filteredAppleProducts[indexPath.row]

            return cell!
        }
        else
        {
            cell!.textLabel?.text = self.appleProducts[indexPath.row]

            return cell!
        }
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        let vc = self.storyboard!.instantiateViewControllerWithIdentifier("Detail") as! DetailViewController
        self.navigationController!.pushViewController(vc, animated: true)
    }
    func updateSearchResultsForSearchController(searchController: UISearchController){

        self.filteredAppleProducts.removeAll(keepCapacity: false)

        let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
        let array = (self.appleProducts as NSArray).filteredArrayUsingPredicate(searchPredicate)
        self.filteredAppleProducts = array as! [String]

        self.tableView.reloadData()
    }

}

我的 resultSearchController 工作完全正常,但是当我单击任何单元格时,UISearchController 也会出现在我的下一个视图中,如下图所示:

但是我的第二视图是空的。

当我切换到另一个视图时如何删除这个 resultSearchController 以便它不会出现在下一个视图中?

项目 Sample 了解更多信息。

只需在viewDidLoad

中添加一行
 self.definesPresentationContext = true

文档

A Boolean value that indicates whether this view controller's view is covered when the view controller or one of its descendants presents a view controller.

动图