如果导航栈中不存在视图控制器,则将其推入导航栈

3

我想要检查一个视图控制器是否存在于导航栈中。如果存在,我需要将其弹出,否则我需要将其推入导航栈。我已经尝试了下面的代码。如果不存在,控制权将转移到else块,但是我无法导航到屏幕。请帮助我。

 for aViewController in viewControllers! {

    if aViewController is TabProfileViewController {

      self.navigationController?.popToViewController(aViewController, animated: true)

     }

    else {

        let lvc = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
        self.navigationController?.pushViewController(lvc!, animated: true)
      }
}

请检查您的视图控制器,使用 if (aviewcontroller.isKind(of: TabProfileViewController.self))。 - Sagar Shirbhate
3个回答

5

你在每个循环中都在检查它,因此如果第一次条件为真,可能在下一次迭代中变为假,因此它会弹出和推入。尝试以下代码:

if let viewController = viewControllers?.first(where: { $0 is TabProfileViewController }) {
    navigationController?.popToViewController(viewController, animated: true)
} else {
    let lvc = storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
    navigationController?.pushViewController(lvc!, animated: true)
}

0
希望这段代码对你有用。
    if navigationController != nil && !(navigationController?.topViewController is YOURCONTROLLER) {
        for aViewController in (navigationController?.viewControllers)! 
          {
            if aViewController is YOURCONTROLLER {
            //Your controller found
            }else{
               //push using navigation
            }
        }
    }

0

这是另一种方法:

 if arrViewController != nil && !(arrViewController?.topViewController is TabProfileViewController) {
        for aViewController in (arrViewController?.viewControllers)! {
            if aViewController is Dashboard {
                _ = self.navigationController?.popToViewController(aViewController, animated: true)
                break
            }
        }
    }else{
         let lvc = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
         self.navigationController?.pushViewController(lvc!, animated: true)
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接