快速打开特定的View Controller

时间:2018-10-03 11:16:23

标签: ios swift uitabbarcontroller

我已经在我的应用中实现了firebase notification。当我单击通知时,我想打开特定的vc。 vc的层次结构是这样,

  

TabBarController-> TabBarVC1-> 1VC-> 2VC

现在,我想在单击通知时转到2VC。我已经尝试了代码,但运行良好,但是VC的层次结构受到干扰,当我将代码移到那里时,它不会再出现。这就是我打开2VC的方式。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "2VC")
self.present(controller, animated: true, completion: nil)

我希望它打开2VC,但其层次结构不应受到干扰。 当我在2VC上单击“后退”按钮时,它应该移回1VC。

2 个答案:

答案 0 :(得分:0)

要具有后退按钮,则需要将tabBar的根vc设置为navigationController

  

入口点-> TabBar-> Tab1-> NavigationController-> VC1-> VC2

然后在vc1中使用它

self.navigationController?.pushViewController(vc2, animated: true)

如果您想从AppDelelgate打开通知接收通知,请使用

if let tab = self.window?.rootViewController as? UITabBarController {
 let vc1 = //////
 let vc2 = //////
 let nav = tab.viewControllers![0] as! UINavigationController
 nav.viewControllers = [vc1,vc2]
}

答案 1 :(得分:0)

这样做

let vc1 = // alloc vc 1
let vc2 = // alloc vc 2
let vc3 = // alloc vc 3
let nav_Controllr = // alloc UINavigationController

// Now add your previous vc in NavigationController first
nav_Controllr.viewControllers.append(vc1)
nav_Controllr.viewControllers.append(vc2)

// Now push to the vc where you wanted navigate
nav_Controllr.pushViewController(vc3, animated: true)

现在您的导航堆栈就是这样

vc1 -> vc2 -> vc3

当您弹出控制器时,它始终会出现在此流程中。

vc3 => vc2 => vc1