通过硬编码加载与标签栏控制器相关的所有视图

问题描述:

我想通过代码从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分),而不涉及到标签栏。我该如何解决它?

哦,这段代码看起来错了。

  1. 在您的故事板中给出TabBarController的“tabView”ID,而不是其中的ViewController。
  2. 为什么你要双重实例化ViewController?只需做一次并将其分配给vc变量。
  3. 为什么您在呈现VC之前已经创建了延迟?这是某种解决方法?

工作代码:

let vc = storyboard.instantiateViewController(withIdentifier: "tabView") as! UITabBarController 
    self.present(vc, animated: true) 
+0

不,它仍然只加载与标签栏相关的第一个viewController而不显示最后一个。我已经控制了TabView ID被赋予TabBarController,就是这样。 –

+0

将它与DispatchQueue结合使用后! –

使用

(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类中没有窗口属性。 第二,没有定义该名称的方法。 –