搜索后访问索引路径行

时间:2015-06-09 17:47:33

标签: ios xcode swift uisearchcontroller

我使用数据填充表格,所有工作都按预期进行 - 包括将每行详细信息转换为另一个场景。我在那里抛出一个搜索栏(以编程方式 - 使用新的searchController),它成功地重新加载原始表格中的任何找到的结果。

但是,在搜索后触摸选定的行时,传递的segue是原始表行的恰好位于现在触摸的行的相同位置! (即如果我选择当前搜索的第二行,下一个场景将会删除原始表格第二行的细节!)

那么如何在搜索后提供prepareForSegue函数我的正确行?

这是细胞创建:

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

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

    self.tableView.reloadData()
}

这是搜索功能:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using [segue destinationViewController].

    var thirdScene = segue.destinationViewController as! customer_details_View_Controller
    if let indexPath = self.tableView.indexPathForSelectedRow() {

        thirdScene.basics = the_basics[indexPath.row]
        thirdScene.p_method = the_p_method[indexPath.row]
        thirdScene.notes = the_notes[indexPath.row]

    }

    // Pass the selected object to the new view controller.
}

这就是segue:

contentPane

1 个答案:

答案 0 :(得分:3)

您还必须检查prepareFOrSegueDidSelectRowAtIndexPath中的搜索结果是否有效。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using [segue destinationViewController].

var thirdScene = segue.destinationViewController as! customer_details_View_Controller

if self.resultSearchController.active && searchController.searchBar.text != "" {
// Select data from Filtered Array
} else {
 // Select data from regular array
}
}

Rey Wenderlich有一个很好的教程:

https://www.raywenderlich.com/113772/uisearchcontroller-tutorial