一尘不染

呈现一个视图控制器,将其关闭,然后在Swift中呈现一个不同的视图控制器

swift

因此,我有一个带有按钮的根视图控制器,当用户按下该按钮时,将显示另一个视图控制器。第二个控制器具有一个关闭选项,该选项仅返回到根视图控制器,还有一个按钮,当用户触摸它时,该按钮将关闭当前视图控制器,以便它再次返回到根视图控制器并显示另一个按钮。转到我使用的第一个控制器:

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

在另一个视图控制器中,我选择仅关闭的按钮,然后执行此操作。

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

因此,对于需要解雇并显示另一个控制器的第二个控制器,我尝试了以下操作:

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!

阅读 222

收藏
2020-07-07

共1个答案

一尘不染

发生错误的原因是,您在解雇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)
})

这个问题与我昨天回答的问题非常相似。

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

weak var pvc = self.presentingViewController

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