Как я могу вернуться к Main.storyboard, который содержит TabBarController из другого Storyboard - PullRequest
0 голосов
/ 06 марта 2019

У меня есть две раскадровки, одна из которых содержит все, чем на самом деле является приложение, а другая содержит руководство для моего приложения.

Как только учебник закончен, я хочу вернуться к своему исходному контроллеру представления.

Это мой код для перехода на другую раскадровку:

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)   
}

Я также пробовал это на другой раскадровке, но при этом кнопка не меняет вид:

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, который будет содержать TabBarController с выбранным индексом 1, из раскадровки, не содержащей навигации? контроллер или TabBarController?

1 Ответ

2 голосов
/ 06 марта 2019

Когда вы представляете onbaording, вы должны вернуться на вкладку с помощью

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

для сложных презентаций вы можете сделать это для легкого возврата

let vc = storyboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController  
(UIApplication.shared.delegate as! AppDelegate).window!.rootViewController = 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)

поток внутри onbarding должен быть с pushViewController

затем уволить в последней записи vc

  if let tab =  (UIApplication.shared.delegate as! AppDelegate).window?.rootViewController as? UITabBarController {
     tab.dismiss(animated:true,completion:nil)
  } 
...