搜索后访问索引路径行
Accessing index path row after search
我用数据填充了一个 table 并且所有工作都按预期进行 - 包括将每一行的详细信息连接到另一个场景。我在那里放了一个搜索栏(以编程方式 - 使用新的 searchController),它成功地重新加载了原始 table 和任何找到的结果。
但是,当在搜索后触摸选定的行时,传递的转场是原始 table 行的转场,恰好与现在触摸的行处于同一位置! (即如果我选择当前搜索的第二行,下一个场景将继续原始第二行的细节table!)
那么如何在搜索后为我的正确行提供 prepareForSegue 函数?
这是单元格创建:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
if (self.resultSearchController.active) {
cell.textLabel?.text = filteredTableData[indexPath.row]
return cell
}
else {
cell.textLabel?.text = TableTitle[indexPath.row]
return cell
}
}
这是搜索功能:
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.
}
您还必须检查在 prepareFOrSegue
或 DidSelectRowAtIndexPath
中激活的搜索结果。
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
我用数据填充了一个 table 并且所有工作都按预期进行 - 包括将每一行的详细信息连接到另一个场景。我在那里放了一个搜索栏(以编程方式 - 使用新的 searchController),它成功地重新加载了原始 table 和任何找到的结果。
但是,当在搜索后触摸选定的行时,传递的转场是原始 table 行的转场,恰好与现在触摸的行处于同一位置! (即如果我选择当前搜索的第二行,下一个场景将继续原始第二行的细节table!)
那么如何在搜索后为我的正确行提供 prepareForSegue 函数?
这是单元格创建:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
if (self.resultSearchController.active) {
cell.textLabel?.text = filteredTableData[indexPath.row]
return cell
}
else {
cell.textLabel?.text = TableTitle[indexPath.row]
return cell
}
}
这是搜索功能:
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.
}
您还必须检查在 prepareFOrSegue
或 DidSelectRowAtIndexPath
中激活的搜索结果。
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