我知道在ios8中不推荐使用searchDisplayController,我在使用UISearchController找到筛选结果中的选定行时遇到问题
我有以下情况:
var myObject = PFObject(className:"XX")
if segue.identifier == "XXXSegue" {
if let destination = segue.destinationViewController as? XXXTableViewController {
if (self.resultSearchController.active) {
if let row = self.searchDisplayController?.searchResultsTableView.indexPathForSelectedRow()?.row {
myObject = self.searchResults[row]
}
}
else {
if let row = tableView.indexPathForSelectedRow()?.row {
myObject = self.objects![row] as! PFObject
}
}
// I will be using myObject for other stuff here
}
}
如何从UISearchController中找到所选行索引,即相当于:
self.searchDisplayController?.searchResultsTableView.indexPathForSelectedRow()?.row
使用UISearchController?
答案 0 :(得分:2)
一种解决方案是将segue连接到Story Board中的目标视图控制器,作为手动“推送”来自TableViewController 的segue,而不是从表视图的原型中选择“push”segue细胞
然后,在 tableView:didSelectRowAtIndexPath 函数中,手动执行segue:
self.performSegueWithIdentifier("XXXSegue", sender: tableView)
将根据您的UISearchController是否处于活动状态,作为完整的未过滤表视图或简化的过滤表视图作为参数传递。
最后,在 prepareForSegue 函数中:
if segue.identifier == "XXXSegue" {
let sender = sender as! UITableView
let destController = segue.destinationViewController as! XXXTableViewController
let indexPath = sender.indexPathForSelectedRow()!
if self.resultSearchController.active {
destController.objects = self.searchResults[indexPath.row] //filtered array
} else {
destController.objects = self.objects[indexPath.row] //full array
}
}
**编辑:但是,为了更直接地回答你的问题,你可以试试这个:
if self.resultSearchController.active {
let updater = self.resultSearchController.searchResultsUpdater as! UITableViewController
let indexPath = updater.tableView.indexPathForSelectedRow()!
...
}
如果您在初始化UISearchController时设置了 resultSearchController.searchResultsUpdater = self ,则此方法有效。
答案 1 :(得分:0)
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
if tableView == self.searchDisplayController.searchResultsTableView {
self.performSegueWithIdentifier("XXXSegue", sender : self)
}
}
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject?)
{
//perform your checks upon segue or custom objects
var indexPath = NSIndexPath()
if self.searchDisplayController.active {
// index path from search table ...
indexPath = self.searchDisplayController.searchResultsTableView.indexPathForSelectedRow()
} else {
// index path from main table ...
}
}