选择列表的顺序

时间:2019-02-21 16:56:15

标签: ios swift segue

我正在实现以下内容。我有一个视图控制器,并且有一些按钮可以打开带有选择项的表格视图控制器。然后,当我在单元格中选择一个项目并返回到视图控制器时,以前的值是空白的(看起来像它打开了一个新实例)。我要返回的代码如下:

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 :(得分:0)

是的,如果您从VC1(GameViewController)到VC2(SomeTableViewController)然后从VC2到VC1进行了隔离,则它不是VC1的同一实例。

如果您不使用UINavigationController,则可以通过使用

取消VC2来简单地从VC2返回VC1
dismiss(animated: true)

但是现在如何将数据传递回以前的控制器?从此开始:在VC2中,创建带有类型为Player的参数的闭包变量。然后,在关闭VC2之前,请调用此闭包

class SomeTableViewController: UITableViewController {

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

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

}

但是会在调用callback之后发生吗?没什么,您无需分配任何内容即可呈现VC2。因此,您可以在VC1中覆盖prepare(for:sender:)并分配目标的callback闭包变量(当调用callback时,您需要更改VC1的item2

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