ios - 在呈现新 View Controller 后关闭当前 View Controller - swift

标签 ios swift dismiss presentviewcontroller

我正试图解雇一个 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/

相关文章:

ios - 使用 Monotouch 和 iOS 从服务中提取数据 (JSON) 的理想方式?

ios - String 没有一个名为 characters 的成员?

ios - UIAlertView 在返回时关闭

android - 如何从 EditText 中消除 "setError()"

ios - 是否可以在显示之前/在 viewDidAppear/viewDidLoad 之前准备/重置场景?

android - 如何在函数外使用变量

ios - iOS UIImage 上的棱镜效果

ios - 当@2x~ipad 图像存在时,将@2x 文件用于非 Retina iPad

ios - Objective-C 观察者——如何在 Swift 中使用

ios - 在 Swift 中分别显示日期和时间