使用UISearchController搜索不同View Controller中的UITableView

时间:2016-04-30 10:08:05

标签: ios swift uitableview uisearchcontroller

我正在尝试实施UISearchController来引用并从另一个View Controller中搜索UITableView中的项目。换句话说,我想在VC1中使用搜索栏来搜索VC2的UITableView中的项目。

我这样做的原因是因为我希望在我的应用程序打开时能够正确使用搜索功能,即在VC1中而不必使用VC1-> V2来搜索VC2中的项目。

我已经创建了一些简单的代码来搜索VC1的UITableView中的项目,但是如何引用VC2的UITableView

以下是UISearchController实施的示例代码:

let tableData = ["One","Two","Three","Twenty-One"]
var filteredTableData = [String]()
var resultSearchController = UISearchController()

override func viewDidLoad() {
    super.viewDidLoad()

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

        self.tableView.tableHeaderView = controller.searchBar

        return controller
    })()

    // Reload the table
    self.tableView.reloadData()
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if (self.resultSearchController.active && self.resultSearchController.searchBar.text != "") {
        return self.filteredTableData.count
    }
    else {
        return self.tableData.count
    }
}

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

    if (self.resultSearchController.active && self.resultSearchController.searchBar.text != "") {
        filteredTableData = tableData
        cell.textLabel?.text = filteredTableData[indexPath.row]

        return cell
    }
    else {
        cell.textLabel?.text = tableData[indexPath.row]

        return cell
    }
}

func updateSearchResultsForSearchController(searchController: UISearchController)
{
    filteredTableData.removeAll(keepCapacity: false)

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

    self.tableView.reloadData()
}

仅供参考:我的VC1和VC2都通过UINavigationController

连接

谢谢!

0 个答案:

没有答案