程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从模态呈现的视图控制器导航到根视图控制器 怎么样?结果大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从模态呈现的视图控制器导航到根视图控制器 怎么样?结果?

开发过程中遇到从模态呈现的视图控制器导航到根视图控制器 怎么样?结果的问题如何解决?下面主要结合日常开发的经验,给出你关于从模态呈现的视图控制器导航到根视图控制器 怎么样?结果的解决方法建议,希望对你解决从模态呈现的视图控制器导航到根视图控制器 怎么样?结果有所启发或帮助;

我有以下场景。

根视图控制器 - A

推送视图控制器 - B

呈现的视图控制器 - C

A -> 推 B。

B -> 呈现 C。

我怎样才能从 C 回到 A。

解决方法

你可以在C里面写以下内容

let presenTing = self.presenTingViewController ?? self.navigationController?.presenTingViewController
let navCtrl1 = presenTing as? UINavigationController // in case you presented C using b.navigationController.present...
let navCtrl2 = presenTing?.navigationController // in case you presented c using b.present...
if let navCtrl = navCtrl1 ?? navCtrl2  {
    self.dismiss(animated: true,completion: {
        navCtrl.popToRootViewController(animated: truE)
    })
}

更新

我想知道是否有任何方法可以绕过关闭并直接弹出到根视图控制器。我想避免显示视图控制器 B

let presenTing = self.presenTingViewController ?? self.navigationController?.presenTingViewController
let navCtrl1 = presenTing as? UINavigationController // in case you presented C using b.navigationController.present...
let navCtrl2 = presenTing?.navigationController // in case you presented c using b.present...
if let navCtrl = navCtrl1 ?? navCtrl2  {
    navCtrl.popToRootViewController(animated: falsE)
    self.dismiss(animated: true,completion: nil)
}
,

怎么样?

要实现这一点,您必须将呈现控制器 UINavigationController 作为变量传递给您正在 present 操作的视图控制器。让我向您展示方法和结果。

vcA 推送到 vcB 相当简单。需要注意的一件事是,当您从 vcA 推送到 vcB 时,vcA 将位于导航堆栈中。虑到这一点,让我移动一个。

首先通过添加一个变量来保存呈现 vcC 的视图控制器的 UINavigationCongroller,即 vcC,从而对 vcB 进行更改。请按以下步骤操作(阅读评论)

class ViewControllerC: UIViewController {

    // Variable that holds reference to presenTing ViewController's Navigtion controller
    var presenTingNavigationController: UINavigationController!

    //Some action that triggers the "Go-BACk-to-A"
    @objc func pressed() {
        // When the completion block is executed in dismiss,// This function will loop through all ViewControllers in the presenTing Navigation stack to see if vcA exists
        // Since vcA was earlier pushed to the navigation stack it should exist
        // So we can use the same navigation controller to pop to vcA    
        // Set the animated property to false to make the transition instant
        dismiss(animated: falsE) {
            self.presenTingNavigationController.viewControllers.forEach({
                if let vc = $0 as? ViewController {
                    self.presenTingNavigationController.popToViewController(vc,animated: truE)
                }
            })
        }
    }

vcB 中,您可以将以下内容添加到 present(_:_:_:) 函数

// function call
@objc func pressed() {
    let vc = ViewControllerC()
    // SetTing the navigation controller for reference in the presented controller
    vc.presenTingNavigationController = self.navigationController  
    present(vc,animated: true,completion: nil)
}

结果

从模态呈现的视图控制器导航到根视图控制器
      
    怎么样?结果

大佬总结

以上是大佬教程为你收集整理的从模态呈现的视图控制器导航到根视图控制器 怎么样?结果全部内容,希望文章能够帮你解决从模态呈现的视图控制器导航到根视图控制器 怎么样?结果所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。