Hos*_* Ap 11 dismiss ios presentviewcontroller swift
我正试图解雇一个VC并提出一个新的VC.但我不希望旧的VC再存在.我使用下面的代码来关闭当前的VC并提供新的VC.但是这样,在解雇和现在之间有一段时间间隔.我不希望用户注意到这一点.所以,我想首先提出新的VC然后解雇前一个.有没有办法做到这一点?
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let destinationController = self.storyboard?.instantiateViewController(withIdentifier: "login") as! Login
let presentingVC = self.presentingViewController
self.dismiss(animated: false, completion: { () -> Void in
presentingVC!.present(destinationController, animated: true, completion: nil)
})
Run Code Online (Sandbox Code Playgroud)
Ben*_*wry 10
放弃
因此,除非您绝对需要以模态方式呈现新VC,否则我建议您只在两个VC之间执行segue.您似乎只是以模态方式呈现它,因为您想稍后从原始VC手动关闭它.在我看来,不仅使用segue这更容易,而且还允许您使用我在下面概述的方法.
解
这可能不是最优雅的方法,但您可以将旧VC的实例传递prepareForSegue给下一个VC,然后在新VC中将其关闭viewDidLoad.
例如,在你的新VC中你可以有这样的东西:
class NewVC: UIViewController {
...
var prevVC: PrevVC!
override func viewDidLoad() {
super.viewDidLoad()
prevVC.dismiss(animated: false, completion: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当您的newVC加载时,它会解除之前的VC.您在prevVC类中需要做的就是prepareForSegue像这样传递实例.
class PrevVC: UIViewController {
...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? NewVC {
destinationVC.prevVC = self
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么当然你只需要在你想要的时候展示新的VC,然后其他一切都会被处理掉.
| 归档时间: |
|
| 查看次数: |
17735 次 |
| 最近记录: |