1

Пользователь входит в систему и приземляется на viewNumOne, они заполняют свое имя и адрес и получают вид ViewNumTwo и viewNumThree. Теперь они выходят из системы. Когда они возвращаются, я хочу, чтобы они перешли прямо к viewColorBlue (вот где я столкнулся с проблемой).Swift: программный переход от одного вида к другому с помощью TabBar и навигационного контроллера

(Экран входа) Просмотреть контроллер с полями входа. После входа в систему они идут в rootVC, который является TabBar и они приземляются на первой вкладке, которая viewNumOne (это работает отлично)

(Root) TabBar:

(Первая вкладка - TabBar [0]) viewNumNavController> viewNumOne (имя/адрес информационных полей здесь)> viewNumTwo> viewNumThree

(Вторая вкладка - TabBar [1]) viewColorNavController> viewColorRed> viewColorBlue> viewColorWhite (кнопка выхода из системы здесь)

Вот код, который я пробовал, но он shes:

let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 

let tabBarController = mainStoryboard.instantiateInitialViewController() as! UITabBarController 
tabBarController.selectedIndex = 1 

let viewColorNaviCon = tabBarController.viewControllers![1] as! UINavigtionController 
let viewColorBlueVC = viewColorNaviCon.topViewController as! ViewColorBlueController 
self.presentViewController(viewColorBlueVC, animated: true, completion: nil) 

ответ

1

Мне потребовалось 20 часов, чтобы понять это, поэтому, надеюсь, это спасет кого-то еще в это время. Что вам нужно сделать, это сбросить контроллер корневого представления контроллера навигационной панели TabBar.

Это первый шаг. Предположим, что пользователь приземлился на viewNumOne, где они заполнили свое имя и адрес. Предполагая, что они правильно заполнили свое имя и адрес, если они вышли из системы и вошли в систему, им не понадобилось бы снова увидеть эту сцену. Чтобы представить новую сцену vc, вы должны сначала установить навигационный контроллер панели вкладок, который вы хотите изменить для vc.

let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
let tabBarController = mainStoryboard.instantiateViewControllerWithIdentifier("MainTabBarController" 
tabBarController.selectedIndex = 1 
let viewNumNavController = tabBarController.viewControllers![1] as! ViewNumNavigationController 

Это второй шаг. Вы должны создать массив новых контроллеров представлений, которые вы хотите видеть.

//Array of view controllers you want to set as the Navigation Controller's new array of VC's 
let viewColorRedVC = mainStoryboard.instantiateViewControllerWithIdentifier("ViewColorRedController") as! ViewColorRedController 
let viewColorBlueVC = mainStoryboard.instantiateViewControllerWithIdentifier("ViewColorBlueController") as! ViewColorBlueController 
let viewColorWhiteVC = mainStoryboard.instantiateViewControllerWithIdentifier("ViewColorWhiteController") as! ViewColorWhiteController 
let newArrayOfVCs = [viewColorRedVC, viewColorBlueVC, viewColorWhiteVC] 

Теперь последний шаг - изменить контроллер корневого представления панели вкладок, используя массив сверху.

//This method is what sets the Navigation Controller's new child views to be presented 
viewNumNavController.setViewControllers(newArrayOfVCs, animated: false) 
//This method is what sets the exact view controller you want use as the actual root vc (the very first scene the user will see) 
viewNumNavController.popToViewController(viewColorRedVC, animated: true) 
self.presentViewController(tabBarController, animated: true, completion: nil) 

Надеюсь, это поможет!