2016-08-29 4 views
-2

У меня есть приложение, когда пользователь нажимает на ячейку, он откроет другой viewController, и я просто добавлю uisearchcontroller в свой рабочий стол.didSelectRowAtIndexPath указательный путь с uisearchcontroller

Когда я ищу по таблице, результат верен, , но когда я нажимаю на ячейку после фильтрации, она открывает неправильную страницу.

Моя проблема, я не сейчас, как определить indexpath когда uiviewcontroller активен, чтобы сделать результат открытой правильной странице

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     IndexPathRow = indexPath.row 


     performSegueWithIdentifier("toView2", sender: self) 
} 

Редактировать

Я решил свою проблему, добавив новым переменной в структуре целочисленного типа, а затем изменить функцию didSelectRowAtIndexPath на

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

if resultSearchController.active && resultSearchController.searchBar.text != ""{ 

     IndexPathRow = filteredData[indexPath.row].i 
    } 

    else { 
     IndexPathRow = indexPath.row 

    } 

    performSegueWithIdentifier("toView2", sender: self) 

    } 
+0

Вам необходимо предоставить дополнительную информацию. У вас должен быть какой-то метод для хранения того, что находится в разных ячейках (например, массив данных ячейки). Тогда строка может соответствовать элементу, расположенному в этом месте в массиве. – Kendel

ответ

0

Лучший способ получить выбранный элемент, чтобы позвонить indexPathForSelectedRow() методу внутри SEGUE делегата

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    performSegueWithIdentifier("toView2", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "toView2" { 
     let indexPath = self.tableView.indexPathForSelectedRow() { 
      print("IndexPathRow = \(indexPath.row)") 
      //destination controller code goes here ... 
     } 
    } 
} 
+0

Я получил эту ошибку «Переменная, используемая в пределах своего собственного начального значения» в indexPath.row – Basil

+0

Возможно, вы запустили этот код в 'didSelectRowAtIndexPath'? Вы должны запустить этот код в 'prepareForSegue' – meda

0

Вы получаете данные с основным массивом, попытаться получить данные с найденным массивом, то только его правильный, проверьте на searchController.isActive() на весь метод, связанный с основным массивом, в основном проверьте это в своем prepareForSegue