我正试图解雇一个 VC 并提出一个新的 VC。但我不希望旧的 VC 存在了。我使用下面的代码关闭当前的 VC 并展示新的 VC。但是这样,在 dismiss 和 present 之间有一个时间间隔。我不希望用户注意到这一点。所以,我想先介绍新的 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)
})
最佳答案
免责声明
因此,除非您绝对需要模态展示您的新 VC,否则我建议只在两个 VC 之间执行一个 segue。似乎您只是以模态方式呈现它,因为您想稍后从原始 VC 中手动关闭它。在我看来,使用 segue 不仅更容易,而且还允许您使用我在下面概述的方法。
解决方案
这可能不是最优雅的方法,但您可以通过 prepareForSegue
将旧 VC 的实例传递给下一个 VC,然后在新 VC 的 viewDidLoad< 中将其关闭
。
例如,在你的新 VC 中你可以有这样的东西:
class NewVC: UIViewController {
...
var prevVC: PrevVC!
override func viewDidLoad() {
super.viewDidLoad()
prevVC.dismiss(animated: false, completion: nil)
}
}
因此,当您的新 VC 加载时,它会关闭之前的 VC。您在 prevVC 类中需要做的就是像这样传递 prepareForSegue
中的实例。
class PrevVC: UIViewController {
...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? NewVC {
destinationVC.prevVC = self
}
}
}
当然,您只需要在需要时展示新的 VC,然后其他一切都将得到处理。
关于ios - 在呈现新 View Controller 后关闭当前 View Controller - swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42339390/