iOS TabBarController 只显示黑屏
Posted
技术标签:
【中文标题】iOS TabBarController 只显示黑屏【英文标题】:iOS TabBarController shows only black screen 【发布时间】:2018-03-16 12:28:30 【问题描述】:我创建了一个带有 4 个 UIViewControllers 的 TabBarController。但是,当我想在 TabBarController 中显示其中一个 ViewController 时:
func gotoMainAppVC()
let mainVC:SearchVC = SearchVC()
self.present(mainVC, animated: true, completion: nil)
我只得到一个纯黑屏。我做错了什么?
【问题讨论】:
searchVC 是您的标签栏控制器吗?你的 tabbarcontroller 是通过 storyboard 创建的吗? 添加更多细节... 不,searchVC 是对应选项卡的 UIViewController 之一。 TabBarController 本身是在 Storyboard 中创建的,而不是在代码中present(animated:)
应该以模态方式呈现视图控制器(默认情况下)。我想这不是你想要的。查看与 UITabBarController developer.apple.com/documentation/uikit/uitabbarcontroller/…相关的手册
PS:通常不需要继承UITabBarController,因为它只是一个容器,控制器。我建议考虑一下。
【参考方案1】:
这不是它的工作原理。
我不确定self
在您的上下文中是什么,但我希望它是标签栏控制器或标签栏上的视图控制器之一。
调用present
意味着你想在当前视图控制器上显示一个视图控制器,默认情况下从底部向上带来一个新的全屏视图控制器。
由于您通过调用SearchVC()
创建了一个新的视图控制器实例,这不是您在故事板中看到的视图控制器。您可以创建任何视图控制器的任何实例,但在您的情况下,如果您在情节提要中设计了SearchVC
,您希望实际使用它的那个版本。为此,您需要在情节提要中设置情节提要 ID。完成后,您应该将其初始化为:
UIStoryboard(name: <#T##String#>, bundle: nil).instantiateViewController(withIdentifier: <#T##String#>)
如
let mainVC:SearchVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TheIDIHaveSet") as! SearchVC
但同样,这不会为您提供标签栏内的视图控制器,而是创建一个新实例。它不会将其作为选项卡之一插入,而是呈现一个新的全屏视图控制器。
【讨论】:
谢谢!那么显示标签栏控制器的最佳方式是什么? @erdwfddsfdfsdfsdffd 我需要更多相关信息。现在你说要显示标签栏控制器,有问题的是,它似乎是标签栏中已经可见的特定视图控制器。以上是关于iOS TabBarController 只显示黑屏的主要内容,如果未能解决你的问题,请参考以下文章