performSegue 创建两个视图控制器
performSegue creates two view controllers
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
self.delegate = segue.destination as? MenuViewController
print("check_1", self.delegate)
}
@IBAction func openMenu(_ sender: Any) {
performSegue(withIdentifier: "openMenu", sender: sender)
print("check_2", self.delegate)
}
我的主要 ViewController
更新值,而 MenuViewController
显示这些值。每次 ViewController
值更新时,它都会在 MenuViewController
中调用 self.delegate.updateValues
。我通过按钮在两个 ViewControllers
之间切换。
我的问题是显示的 MenuViewController
似乎与 ViewController
中 self.delegate
中存储的对象不同。打印检查语句:
check_1 Optional(<Menu.MenuViewController: 0x10161ca10>)
check_2 Optional(<Menu.MenuViewController: 0x10161ca10>)
check_1 Optional(<Menu.MenuViewController: 0x10161dd10>)
请问如何确保只创建一个 MenuViewController
实例并将其存储在 self.delegate
中?
当你向故事板添加转场时,如果你将转场连接到特定按钮/IBAction
,你不需要手动调用performSegue
,它会自动调用给你。
您执行了 2 个转场,因为故事板都执行转场,然后您也通过调用 performSegue
.
从代码中执行转场
performSegue
只应在您的 segue 未直接连接到 UI 事件时使用,或者如果您需要有条件地执行 segue - 例如当您有登录按钮时,根据网络响应,您可能会执行错误或登录 segue。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
self.delegate = segue.destination as? MenuViewController
print("check_1", self.delegate)
}
@IBAction func openMenu(_ sender: Any) {
performSegue(withIdentifier: "openMenu", sender: sender)
print("check_2", self.delegate)
}
我的主要 ViewController
更新值,而 MenuViewController
显示这些值。每次 ViewController
值更新时,它都会在 MenuViewController
中调用 self.delegate.updateValues
。我通过按钮在两个 ViewControllers
之间切换。
我的问题是显示的 MenuViewController
似乎与 ViewController
中 self.delegate
中存储的对象不同。打印检查语句:
check_1 Optional(<Menu.MenuViewController: 0x10161ca10>)
check_2 Optional(<Menu.MenuViewController: 0x10161ca10>)
check_1 Optional(<Menu.MenuViewController: 0x10161dd10>)
请问如何确保只创建一个 MenuViewController
实例并将其存储在 self.delegate
中?
当你向故事板添加转场时,如果你将转场连接到特定按钮/IBAction
,你不需要手动调用performSegue
,它会自动调用给你。
您执行了 2 个转场,因为故事板都执行转场,然后您也通过调用 performSegue
.
performSegue
只应在您的 segue 未直接连接到 UI 事件时使用,或者如果您需要有条件地执行 segue - 例如当您有登录按钮时,根据网络响应,您可能会执行错误或登录 segue。