Я хотел бы иметь набор, где информация передается между viewControllers следующим образом: 1-> 2-> 3-> 2. В настоящее время у меня есть настройка для передачи информации от VC 1-> 2. Передаваемая информация - indexPath, что ячейка выбрана из таблицы. Информация должна быть передана, потому что код во втором viewController 'viewDidLoad()
зависит от выбранной ячейки. Он устанавливается следующим образом (и работает отлично): VC 1:Как передать информацию между 3-мя диспетчерами?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard segue.identifier == "cellSelected" else {return}
let indexPath = self.tableView.indexPathForSelectedRow
let rowSelectedd = indexPath
let destViewController: MainPageCellSelectedViewController = segue.destination as! MainPageCellSelectedViewController
destViewController.rowSelected = rowSelectedd!
}
var rowSelectedd = IndexPath()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "cellSelected", sender: rowSelectedd)
}
VC 2 (используя информацию, которая передается): вар rowSelected = IndexPath() // это информация, уготованное от MainPageVC
override func viewDidLoad() {
super.viewDidLoad()
if rowSelected.section == 0{
//do something
} else{
// do something else
}
}
в этом 2-й ViewController есть кнопка, которая перетекает в третью ViewController (это также работает отлично). Тем не менее, в этом третьем viewController есть кнопка назад, которая отходит назад ко второму viewController. Проблема в том, что код 2-го viewController viewDidLoad()
зависит от переменной, переданной от 1-го VC. Поскольку он не передается (потому что segue теперь из 3-> 2 вместо 1-> 2) приложение сбой. Я не уверен, что лучший способ передать эту информацию соответствующим образом. Как это сделать?
Возможный дубликат [Передача данных между контроллерами представлений] (http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) – Rob