ios - 呈现一个 View Controller ,关闭它并在 Swift 中呈现一个不同的 View Controller

标签 ios swift swift3 presentviewcontroller

我有一个 Root View Controller ,它有一个按钮,当用户按下它时,会显示另一个 View Controller 。

第二个 Controller 有一个关闭选项,它只返回 Root View Controller ,还有一个按钮,当用户触摸它时,它会关闭当前 View Controller ,因此它会返回 Root View Controller 一秒钟并显示另一个 View Controller 。

转到我使用的第一个 Controller :

let vc = FirstController()
self.present(vc, animated: true, completion: nil)

当我在另一个 View Controller 中选择只关闭的按钮时,我会这样做。

self.dismiss(animated: true, completion: nil)

因此对于需要关闭并显示另一个 Controller 的第二个 Controller ,我尝试了以下操作:

self.dismiss(animated: true, completion: {
    let vc = SecondController()
    self.present(vc, animated: true, completion: nil)
})

但是我得到一个错误:

Warning: Attempt to present <UINavigationController: 0xa40c790> on <IIViewDeckController: 0xa843000> whose view is not in the window hierarchy!

最佳答案

错误发生是因为您在解散 FirstController 后试图从 FirstController 呈现 SecondController。这不起作用:

self.dismiss(animated: true, completion: {
    let vc = SecondController()

    // 'self' refers to FirstController, but you have just dismissed
    //  FirstController! It's no longer in the view hierarchy!
    self.present(vc, animated: true, completion: nil)
})

这个问题和我answered的一个问题非常相似昨天。

针对您的情况进行了修改,我建议这样做:

weak var pvc = self.presentingViewController

self.dismiss(animated: true, completion: {
    let vc = SecondController()
    pvc?.present(vc, animated: true, completion: nil)
})

关于ios - 呈现一个 View Controller ,关闭它并在 Swift 中呈现一个不同的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43566414/

相关文章:

php - Alamofire打印“由于错误,无法序列化JSON:”

ios - 在 Swift 中裁剪图像后,我得到的结果倾斜了 90 度 - 为什么?

ios - 递归上传目录 iOS AWS S3

swift - 如何使用带属性字符串的系统字体?

ios - mapKit:在用户选择注释标记后执行segue

ios - Xcode 8.1 目标包含使用旧版本的 swift 开发的源代码

swift - 非转义参数的闭包使用可能允许它转义

ios - Xcode iOS 测试套件 NSLog 输出丢失

ios - 可变运算符的左侧不可变 '..<' 返回不可变值

ios - Obj-C setter 返回 null