我有一个 viewControllerA,它以编程方式在 Storyboard中呈现,没有 segue,如下所示:
let storyboard = UIStoryboard(name: "IdStoryBoard", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "idcontroller") as! BController
self.present(controller, animated: true, completion: nil)
然后从 viewControllerA 我转到 viewControllerB,使用 Storyboard segue。
当我关闭 viewControllerB self.dismiss(animated: true, completion: nil)
时,viewControllerA 中未触发 viewDidAppear
.
最佳答案
如果您想在关闭 viewControllerB 时触发 viewControllerA 中的事件,我建议创建一个委托(delegate)方法来链接两者。
在您的viewControllerA 上包含以下内容:
protocol TriggerEventDelegate {
func eventToBeTriggered();
}
然后使您的viewControllerA 符合该协议(protocol):
extension AController: TriggerEventDelegate {
func eventToBeTriggered() {
// Implement whatever you want to trigger here
}
}
在您的viewControllerB上,创建一个委托(delegate)引用:
class BController: UIViewController {
weak var delegate: TriggerEventDelegate?
}
在您关闭 viewControllerB 时执行触发:
func dismiss() {
delegate?.eventToBeTriggered()
self.dismiss(animated: true, completion: nil)
}
最后但并非最不重要的,当从 viewControllerA 移动到 viewControllerB 时,将您的 delegate
设置为 viewControllerA :
func pushFromAToB() {
let storyboard = UIStoryboard(name: "IdStoryBoard", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "idcontroller") as! BController
controller.delegate = self
self.present(controller, animated: true, completion: nil)
}
您的事件现在将被正确触发,而无需依赖 viewDidAppear
关于ios - Swift 4 覆盖 func viewDidAppear(_ 动画 : Bool) not triggering when i dissmiss viewcontroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46929774/