![](/img/trans.png)
[英]how to hide tab bar in the view controller that embedded in the navigation stack in swift?
[英]Tab Bar not recognising ViewControllers when they are embedded in Navigation Controllers swift
我的界面构建器中有视图排列(图片)。
红色:我的根 TabBarController 继续...
黄色:我的 UINavControllers 已嵌入...
绿色:视图控制器
我试图将代码添加到 TabBarController.swift 以更改我的 ViewControllers.swift 的呈现方式(模态演示代码)。
在 TabBarController.swift
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if viewController is CreationViewController {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "CreationVC")
controller.modalPresentationStyle = .fullScreen
self.present(controller, animated: true, completion: nil)
print("hello")
} else { print("spaghet") }
}
}
运行我的应用程序时,当我触摸 CreationViewController 选项卡栏项时无法识别代码,即使正在显示 CreationViewController。 控制台打印“spaghet”而不是“hello”。
所以我换了行
if viewController is CreationViewController
至
if tabBarController.selectedIndex == 1
现在它可以工作了。 我不明白为什么当我使用“如果 ViewController 是 CreationViewController”时视图没有被识别,以及为什么只有当我使用“TabBarController.selectedIndex”时它才被识别。 好像标签栏 Controller 无法识别它所在的视图。 顺便说一句,我已经在 Interface Builder 中为 ViewController 提供了正确的 class (CreationViewController) 和 Storyboard ID(绿色圈出的那个)
这是因为 UITabBarController 呈现的视图 controller 实际上是 UINavigationController。 因此,当您检查它时,它与 class 不匹配
if viewController is CreationViewController
您可以通过简单地打印从 'func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)' 获得的视图 controller 或在该 function 上放置一个断点来测试它。
标签栏 controller 持有UINavigationController
,它可能持有也可能不持有您的CreationViewController
。
你想像这样测试它:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
// make sure the selected tab contains a UINavigationController
guard let navVC = viewController as? UINavigationController else {
print("Selected tab does not contain a navigation controller")
return
}
if navVC.visibleViewController is CreationViewController {
print("CreationViewController is showing in selected tab's navigation controller")
// do something
} else {
print("Some other controller is showing in selected tab's navigation controller")
// do something else
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.