我正在实现以下内容。我有一个视图控制器,并且有一些按钮可以打开带有选择项的表格视图控制器。然后,当我在单元格中选择一个项目并返回到视图控制器时,以前的值是空白的(看起来像它打开了一个新实例)。我要返回的代码如下:
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
}
答案 0 :(得分:0)
是的,如果您从VC1(GameViewController
)到VC2(SomeTableViewController
)然后从VC2到VC1进行了隔离,则它不是VC1的同一实例。
如果您不使用UINavigationController
,则可以通过使用
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
}
}
}