在 UITabBarController 中推送 ViewController
Push ViewController in UITabBarController
我有一个一般性问题:我在我的应用程序中设置了一个 TabBar
。当我单击项目 1 时,TabBar 显示 ViewController
(VC 1) 嵌入在 NavigationController
中。这个 VC 应该在用户注销时推送另一个 VC (VC 2)(使用 firebase 和 addStateDidChangeListener
)。效果很好:当我注销 VC1 时按 VC 2。但是,当我再次单击选项卡栏上的项目 1 时。你猜怎么着?在没有用户的情况下,我可以看到 VC 1。我想我必须以某种方式解雇 VC 1 但我不知道如何实现此功能。你能帮帮我吗?
更改导航控制器中的视图控制器
点击注销按钮时,从导航控制器中移除 VC1 并添加 VC2
if var viewControllers = self.navigationController?.viewControllers {
viewControllers.removeLast()
viewControllers.append(VC2())
self.navigationController?.setViewControllers(viewControllers, animated: true)
}
再次登录时 VC2
再次更改视图控制器
self.navigationController?.setViewControllers([VC1()], animated: true)
更改选项卡栏控制器中的视图控制器
注销
if var viewControllers = self.tabBarController?.viewControllers {
let newVC = UINavigationController(rootViewController: VC2())
newVC.tabBarItem = UITabBarItem(title: "Log In", image: nil, tag: 0)
viewControllers.removeFirst()
viewControllers.insert(newVC, at: 0)
self.tabBarController?.viewControllers = viewControllers
}
登录
if var viewControllers = self.tabBarController?.viewControllers {
let newVC = UINavigationController(rootViewController: VC1())
newVC.tabBarItem = UITabBarItem(title: "Home", image: nil, tag: 0)
viewControllers.removeFirst()
viewControllers.insert(newVC, at: 0)
self.tabBarController?.viewControllers = viewControllers
}
您可以覆盖 window rootviewcontroller 新标签栏控制器。所以将来你不会有任何新开发的错误(新的屏幕层次结构)。
//Login
let navigation = UINavigationController.init(rootViewController: vc1)
let tabVC = UITabBarController()
tabVC.viewControllers?.append(navigation)
self.appDelegate?.window?.rootViewController = navigation
//Logout
let navigation = UINavigationController.init(rootViewController: vc2)
let tabVC = UITabBarController()
tabVC.viewControllers?.append(navigation)
self.appDelegate?.window?.rootViewController = navigation
我有一个一般性问题:我在我的应用程序中设置了一个 TabBar
。当我单击项目 1 时,TabBar 显示 ViewController
(VC 1) 嵌入在 NavigationController
中。这个 VC 应该在用户注销时推送另一个 VC (VC 2)(使用 firebase 和 addStateDidChangeListener
)。效果很好:当我注销 VC1 时按 VC 2。但是,当我再次单击选项卡栏上的项目 1 时。你猜怎么着?在没有用户的情况下,我可以看到 VC 1。我想我必须以某种方式解雇 VC 1 但我不知道如何实现此功能。你能帮帮我吗?
更改导航控制器中的视图控制器
点击注销按钮时,从导航控制器中移除 VC1 并添加 VC2
if var viewControllers = self.navigationController?.viewControllers {
viewControllers.removeLast()
viewControllers.append(VC2())
self.navigationController?.setViewControllers(viewControllers, animated: true)
}
再次登录时 VC2
再次更改视图控制器
self.navigationController?.setViewControllers([VC1()], animated: true)
更改选项卡栏控制器中的视图控制器
注销
if var viewControllers = self.tabBarController?.viewControllers {
let newVC = UINavigationController(rootViewController: VC2())
newVC.tabBarItem = UITabBarItem(title: "Log In", image: nil, tag: 0)
viewControllers.removeFirst()
viewControllers.insert(newVC, at: 0)
self.tabBarController?.viewControllers = viewControllers
}
登录
if var viewControllers = self.tabBarController?.viewControllers {
let newVC = UINavigationController(rootViewController: VC1())
newVC.tabBarItem = UITabBarItem(title: "Home", image: nil, tag: 0)
viewControllers.removeFirst()
viewControllers.insert(newVC, at: 0)
self.tabBarController?.viewControllers = viewControllers
}
您可以覆盖 window rootviewcontroller 新标签栏控制器。所以将来你不会有任何新开发的错误(新的屏幕层次结构)。
//Login
let navigation = UINavigationController.init(rootViewController: vc1)
let tabVC = UITabBarController()
tabVC.viewControllers?.append(navigation)
self.appDelegate?.window?.rootViewController = navigation
//Logout
let navigation = UINavigationController.init(rootViewController: vc2)
let tabVC = UITabBarController()
tabVC.viewControllers?.append(navigation)
self.appDelegate?.window?.rootViewController = navigation