首页 > 解决方案 > 导航时关闭视图控制器

问题描述

我正在快速创建一个 IOS 应用程序,但在我的案例中发现了一个很大的问题。

如果我要在 Android 中执行此操作,我将使用片段并将当前片段替换为新片段,但在 swift 中似乎没有什么与片段相等,所以。

我从视图控制器 A 开始,然后导航到视图控制器 B(用户应该在此视图中选择他们的名字),然后从 BI 导航到 C。但是当我导航到 CI 时,需要关闭视图控制器 B以避免堆叠。但我找不到一个好方法来删除当前的视图控制器并导航到一个新的。

    func navigateToService(selectedCar: String!){

    if let storyboard = storyboard{
        let vc = storyboard.instantiateViewController(withIdentifier: "BookServiceViewController") as! BookServiceViewController

        self.dismiss(animated: true) //<---

        vc.selectedCar = selectedCar

        self.present(vc, animated: true)
    }
}

到目前为止,我已经尝试过这个以及更多。但在我的情况下似乎没有任何效果。我在线程中添加的代码只是立即关闭视图,而不是打开新视图。

那么如何从 A -> B -> Dimiss B -> C 导航?

临时编辑,将被删除

    func navigateToService(selectedCar: String!){

    self.dismiss(animated: true) {
        if let storyboard = self.storyboard{
           let vc = storyboard.instantiateViewController(withIdentifier: "BookServiceViewController") as! BookServiceViewController


           vc.selectedCar = selectedCar

           self.present(vc, animated: true)
       }
    }

}

标签: iosswift

解决方案


试试这个代码: -

首先,您当前呈现的视图(B)使用此代码制作推送视图,然后尝试呈现您的“BookServiceViewController”视图(C)

    let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "Your_Current_Presented_View") as! Your_Current_Presented_View

    let nav = UINavigationController(rootViewController: nextVC)
    nav.navigationBar.isHidden = true
    DispatchQueue.main.async {
        self.present(nav, animated: true, completion: nil)
    }

现在之后,调用你的函数

func navigateToService(selectedCar: String!){

if let storyboard = storyboard{
    let vc = storyboard.instantiateViewController(withIdentifier: "BookServiceViewController") as! BookServiceViewController

    self.dismiss(animated: true) //<---

    vc.selectedCar = selectedCar

    self.present(vc, animated: true)
}}

推荐阅读