swift 如何推回导航视图控件
swift how to push back to navigation view control
我有几个视图控制器,它们非常复杂。
- MainVC(嵌入标签栏控制器)
- FriendListVC
- ChatRoomUpperVC(嵌入导航视图控制器)
- ChatRoomVC(嵌入 ChatRoomUpperVC 的 NavigationViewController)(仅显示标签栏)
- ChatRoomQuestionVC(从 ChatRoomVC 推送)(仅显示导航栏)
- MatchedWaitVC(从 ChatRoomQuestionVC 推送)(隐藏选项卡和导航栏)
- ChatVC(从 MatchedWaitVC 推送)(只显示导航栏)
- 设置VC
我要做的是当我从 ChatVC 单击后退按钮时,我应该返回到 ChatRoomVC 并仅在底部显示标签栏。
我尝试了下面的代码,但它显示黑屏并且也没有 tar 栏。
override func willMove(toParentViewController parent: UIViewController?) {
if parent == nil
{
var viewControllers = navigationController?.viewControllers
viewControllers?.removeLast(3)
navigationController?.setViewControllers(viewControllers!, animated: true)
self.navigationController?.isNavigationBarHidden = true
self.tabBarController?.tabBar.isHidden = false
}
}
我想您可以使用以下 hack 来实现您想要的。在 ChatVC
的 viewDidLoad
方法中执行:
override func viewDidLoad() {
super.viewDidLoad()
if let root = navigationController?.viewControllers.first {
navigationController?.viewControllers = [root, self]
}
}
这将删除 ChatVC
和 ChatRoomVC
之间的中间视图控制器。现在弹回(例如使用标准后退按钮,或从屏幕左边缘滑动)将直接跳回 ChatRoomVC
.
编辑
要在 ChatRoomVC
中再次显示 tabBar,请将其添加到 viewDidAppear
:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.tabBarController?.tabBar.isHidden = false
}
这将确保一旦 ChatRoomVC
出现在屏幕上,它的 tabBar 也会显示。
我有几个视图控制器,它们非常复杂。
- MainVC(嵌入标签栏控制器)
- FriendListVC
- ChatRoomUpperVC(嵌入导航视图控制器)
- ChatRoomVC(嵌入 ChatRoomUpperVC 的 NavigationViewController)(仅显示标签栏)
- ChatRoomQuestionVC(从 ChatRoomVC 推送)(仅显示导航栏)
- MatchedWaitVC(从 ChatRoomQuestionVC 推送)(隐藏选项卡和导航栏)
- ChatVC(从 MatchedWaitVC 推送)(只显示导航栏)
- 设置VC
我要做的是当我从 ChatVC 单击后退按钮时,我应该返回到 ChatRoomVC 并仅在底部显示标签栏。
我尝试了下面的代码,但它显示黑屏并且也没有 tar 栏。
override func willMove(toParentViewController parent: UIViewController?) {
if parent == nil
{
var viewControllers = navigationController?.viewControllers
viewControllers?.removeLast(3)
navigationController?.setViewControllers(viewControllers!, animated: true)
self.navigationController?.isNavigationBarHidden = true
self.tabBarController?.tabBar.isHidden = false
}
}
我想您可以使用以下 hack 来实现您想要的。在 ChatVC
的 viewDidLoad
方法中执行:
override func viewDidLoad() {
super.viewDidLoad()
if let root = navigationController?.viewControllers.first {
navigationController?.viewControllers = [root, self]
}
}
这将删除 ChatVC
和 ChatRoomVC
之间的中间视图控制器。现在弹回(例如使用标准后退按钮,或从屏幕左边缘滑动)将直接跳回 ChatRoomVC
.
编辑
要在 ChatRoomVC
中再次显示 tabBar,请将其添加到 viewDidAppear
:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.tabBarController?.tabBar.isHidden = false
}
这将确保一旦 ChatRoomVC
出现在屏幕上,它的 tabBar 也会显示。