通过硬编码加载与标签栏控制器相关的所有视图
问题描述:
我想通过代码从viewController跳转到与Tab Bar Controller相关的第一个viewController。通过硬编码加载与标签栏控制器相关的所有视图
tabBarController场景包含故事板ID tabView
。
我的工作是这样的:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc: UITabBarController!
storyboard.instantiateViewController(withIdentifier: "tabView")
vc=storyboard.instantiateViewController(withIdentifier: "tabView") as! UITabBarController
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
self.present(vc as! UIViewController, animated: true, completion: nil)
}
但只加载第一的viewController(满分5分),而不涉及到标签栏。我该如何解决它?
答
哦,这段代码看起来错了。
- 在您的故事板中给出TabBarController的“tabView”ID,而不是其中的ViewController。
- 为什么你要双重实例化ViewController?只需做一次并将其分配给vc变量。
- 为什么您在呈现VC之前已经创建了延迟?这是某种解决方法?
工作代码:
let vc = storyboard.instantiateViewController(withIdentifier: "tabView") as! UITabBarController
self.present(vc, animated: true)
答
使用
(1)如果你想从Appdelegate
let appDelegate = UIApplication.sharedApplication.delegate as! AppDelegate
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tabBar = mainStoryboard.instantiateViewControllerWithIdentifier("TabBarController") as! TabBarController
appDelegate.window?.rootViewController = tabBar
appDelegate.window?.makeKeyAndVisible()
(2)如果你想从viewcontroller
导航具有导航导航根源
self.navigationController?.pushViewController(tabBar, animated: true)
+0
在第一种情况下,我的viewController类中没有窗口属性。 第二,没有定义该名称的方法。 –
不,它仍然只加载与标签栏相关的第一个viewController而不显示最后一个。我已经控制了TabView ID被赋予TabBarController,就是这样。 –
将它与DispatchQueue结合使用后! –