Доступ к строке пути индекса после поиска

Я заполняю таблицу данными, и все работает по назначению, включая переход деталей каждой строки к другой сцене. Закидываю туда поисковую строку (программно - с помощью нового searchController'а) и она успешно перезагружает исходную таблицу с любыми найденными результатами.

ОДНАКО, при касании выбранной строки после поиска, пройденный переход - это переход исходной строки таблицы, которая оказалась в той же позиции, что и та, к которой прикоснулись сейчас! (т. е. если я выберу текущую вторую строку поиска, следующая сцена перейдет к деталям второй строки исходной таблицы!)

Так как же предоставить функции 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.
}

person Chaim Friedman    schedule 09.06.2015    source источник


Ответы (1)


Вы также должны проверить, активен ли результат поиска в 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
}
}

У Рея Вендерлиха есть отличный учебник для этого:

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

person CalZone    schedule 10.09.2016
comment
Спасибо @Calzone. Это был мой старый пост, и я уже нашел решение, очень похожее на ваш ответ, но тогда я забыл ответить на него сам. Еще раз спасибо - ваш ответ принят - person Chaim Friedman; 11.09.2016