我如何返回Main.storyboard,其中包含来自另一个Storyboard的TabBarController

时间:2019-03-05 21:41:18

标签: swift xcode firebase uiviewcontroller uistoryboard

我有两个情节提要,一个包含应用程序实际的所有内容,另一个包含我的应用程序的“入门” /教程。

教程完成后,我想导航回到我原来的视图控制器。

这是我的代码,可以导航到其他故事板:

let defaults = UserDefaults.standard
if defaults.bool(forKey: "firstOpened") {
    print("First VC launched")
}else{
    var vc: UIViewController
    let goTo = UIStoryboard(name: "Onboarding", bundle: nil).instantiateViewController(withIdentifier: "notificationStoryboard") as! FirstOnboardingViewController
    self.present(goTo, animated: true, completion: nil)    
}

有了它,它工作了,除了TabBarController没有显示出来,而且没有按照我想要的方式工作。

这是我的代码,可导航回到Main.Storyboard:

@objc func handleSecondPush() {
    //registerForRemoteNotifications() 
    UserDefaults.standard.set(true, forKey: "firstOpened")
    let goTo = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "pushToFeedVC") 
    self.present(goTo, animated: true, completion: nil)
    //self.performSegue(withIdentifier: "goToLink", sender: nil)   
}

我也在另一个Storyboard中尝试过此操作,但是使用此按钮不会更改视图:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController
print(controller)
self.window?.rootViewController = controller
self.window?.makeKeyAndVisible()
if let tabBarVc = self.window?.rootViewController as? UITabBarController {
    tabBarVc.selectedIndex = 1
}

简而言之,问题:所以我的问题是,如何从不包含故事板的导航板中导航回到main.storyboard,它将包含具有选定索引1的TabBarController的TabBarController。导航控制器还是TabBarController?

1 个答案:

答案 0 :(得分:2)

当您呈现onbaording时,应使用

返回到标签
declare const state: MakeState<NodesState>;

state.attr1;       // `number`
state["foo"]       // `NodesState`

对于复杂的演示文稿,您可以执行此操作以便轻松地重新播放

self.dismiss(animated:true,completion:nil)

更好的是

let vc = storyboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController  
(UIApplication.shared.delegate as! AppDelegate).window!.rootViewController = vc
  

onbarding内部的流应该使用pushViewController

然后在最后一个vc中关闭

  let goTo = UIStoryboard(name: "Onboarding", bundle: nil).instantiateViewController(withIdentifier: "notificationStoryboard") as! FirstOnboardingViewController 
  let nav = UINavigationController(rootViewController:goTo)
  nav.isNavigationBarHidden = true
  self.present(nav, animated: true, completion: nil)