Seque заказ для списков выбора - PullRequest
0 голосов
/ 21 февраля 2019

Я реализую следующее.У меня есть контроллер представления, и у меня есть кнопки, которые открывают контроллер представления таблицы с элементами выбора.когда я затем выбираю элемент в ячейке и возвращаюсь к контроллеру представления, предыдущие значения остаются пустыми (похоже, это открывает новый экземпляр).Код, который я использую для возврата, выглядит следующим образом:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "playerselected" {

        let cell = sender as! UITableViewCell
        let indexPath = tableView.indexPath(for: cell)

        let itemController : GameViewController = segue.destination as! GameViewController
        let item : Player = frc.object(at: indexPath!) as! Player

        itemController.item2 = item
    }

1 Ответ

0 голосов
/ 21 февраля 2019

Да, вы правы, если у вас есть переход от VC1 (GameViewController) к VC2 (SomeTableViewController), а затем от VC2 к VC1, это не тот же экземпляр VC1.

Если вы не используете UINavigationController, вы можете просто "перейти" из VC2 обратно в VC1, отклонив VC2 с помощью

dismiss(animated: true)

Но как теперь вы можете передать данные обратноваш предыдущий контроллер?Начните с этого: в VC2 создайте переменную замыкания, которая принимает параметр типа Player.Затем, прежде чем вы отклоните VC2, вызовите это закрытие

class SomeTableViewController: UITableViewController {

    var callback: ( (Player) -> Void )?

    func playerSelected(_ player: Player) {
        callback?(player)
        dismiss(animated: true)
    }

}

Но произойдет ли после вызова callback?Ничего, вы должны определить, что произойдет до того, как вы представите VC2.Таким образом, вы можете переопределить prepare(for:sender:) внутри VC1 и назначить целевую переменную закрытия callback (когда будет вызываться callback, вам нужно изменить item2) VC1

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "segueToTableViewController" {

        let tableViewController = segue.destination as! SomeTableViewController

        tableViewController.callback = { player in 
            self.item2 = player
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...