如何检查特定的 UiViewcontroller(Tabbar Embedded) 是否在 navigationController 机架中?

How to check whether a specific UiViewcontroller(Tabbar Embedded) is in the navigationController rack?

我有一个 SignInVc 作为起点和一个跳过按钮。如果用户点击跳过,e 将转到主页,当他点击任何按钮时,他将被推送到登录Vc。

homeVC 有 TabBar,就像它的 4 个标签栏之一 Vc。

                   if let viewControllers = self.navigationController?.viewControllers {
                        for controller in viewControllers
                        {
                            if controller == (tabBarController?.viewControllers![0]){
                                print("FOUND IT")
                            }
                            print(controller)
                        }
                    }

使用断点调试时,我可以在navigationController?.viewControllers

中看到主页

但是我无法访问它!!,打印没有执行。我应该在 == 的 RHS 中使用什么?

计划是推送到 homeVC 而不是打印代码。

编辑:

我在下面添加调试的屏幕截图

我想在 索引 2

处访问视图控制器

[

我不认为你有你所描述的层次结构。 真的有

NavigationController -> TabBarController -> HomeViewController or
TabBarController -> NavigationController -> HomeViewController

属性 .navigationController.tabBarController 查找最近的可访问导航和 TabBar 控制器。
只需在故事板或代码中检查您的层次结构,您就会解决您的问题。

UPD.
根据你的屏幕,你应该先找到tabBar controller,然后在tabBarController中找到HomeViewController。我想,代码应该是这样的:

if let tabBar = navController.viewControllers.first(where: { [=11=] is UITabBarController} ){
    let homeController = tabController.viewControllers?.first(where: { [=11=] is HomeViewController})
    print("Home controller: \(home)")
}

不知道我说的对不对,

逻辑上声明一个全局变量,

var initiateHomePage: Bool? // 在任何 swift 文件之上或之外声明

对于按钮操作

案例 1

  @IBAction func skipButtonTapped(_ sender: Any) {
      initiateHomePage = true // should go homepage
    
    }

案例 2

  @IBAction func anyButtonTapped(_ sender: Any) {
      initiateHomePage = false // should go SignInVC
    
    }

最后

正在执行

  if initiateHomePage == true {
      // redirect to home page
      // use this to redirect to tab bar 
       if let viewControllers = self.navigationController?.viewControllers {
                            for controller in viewControllers
                            {
                                if controller == (tabBarController?.viewControllers![0]){
                                    print("FOUND IT")
                                }
                                print(controller)
                            }
                        } 

    //  or use this 
    let ViewController:UIStoryboard = UIStoryboard(name: "Module", bundle: nil)
        let tabBarController = ViewController.instantiateViewController(withIdentifier: "tabBar") as! UITabBarController
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.window?.rootViewController = tabBarController
     
    } else {
      // redirect to SignINVC 
     
    }