如果导航堆栈中不存在视图控制器,请推送该视图控制器



我想检查导航堆栈中是否存在视图控制器。如果它存在,我需要弹出它,否则我需要将其推送到导航堆栈。我尝试了以下代码。如果不存在,则控制权正在转移到 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 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)
}

希望这段代码对您有用。

if navigationController != nil && !(navigationController?.topViewController is YOURCONTROLLER) {
for aViewController in (navigationController?.viewControllers)! 
{
if aViewController is YOURCONTROLLER {
//Your controller found
}else{
//push using navigation
}
}
}

这是另一种方法:

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)
}

最新更新