2

Я знаю, что searchDisplayController осуждается в ios8 и у меня есть вопрос найти выбранную строку в отфильтрованных результатов, используя UISearchControllerUISearchController: как получить выбранный индекс таблицы строк в ios8 (Swift)

У меня есть следующий сценарий:

 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
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 ... 
}  

} 
+0

В вопросе упоминается, что это '' 'UISearchController' '' не 'searchDisplayController'. –

2

Одним из решений являются телеграфировать SEGUE к контроллеру вида назначения в раскадровке как ручного «толчок» Segue от TableViewController, а не как выбор «толчок» Segue от прототипа ячейки табличного представления ,

Затем в Tableview: didSelectRowAtIndexPath функции, вручную выполнить переход с:

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 
    } 
} 

** Edit: Но, чтобы ответить на ваш вопрос еще более прямо, вы можете попробовать это:

if self.resultSearchController.active { 
    let updater = self.resultSearchController.searchResultsUpdater as! UITableViewController 
    let indexPath = updater.tableView.indexPathForSelectedRow()! 
... 
} 

Это работает, если вам установили resultSearchController.searchResultsUpdater = self после инициализации UISearchController.

Смежные вопросы