Ios Swift:通过选项卡栏和导航控制器以编程方式从一个视图转换到另一个视图

Ios Swift:通过选项卡栏和导航控制器以编程方式从一个视图转换到另一个视图,ios,swift,uitabbarcontroller,navigationcontroller,programmatically-created,Ios,Swift,Uitabbarcontroller,Navigationcontroller,Programmatically Created,用户登录并登陆viewNumOne,填写姓名和地址,然后查看viewNumTwo和ViewNumTree。他们现在注销。当他们重新登录时,我希望他们直接进入viewColorBlue(这就是我遇到的问题) (登录屏幕) 查看带有登录字段的控制器。登录后,他们会进入rootVC,这是一个选项卡,他们会进入第一个选项卡,即viewNumOne(这很好) (根) 选项卡栏: (第一个选项卡-选项卡栏[0]) viewNumNavController>viewNumOne(此处有名称/地址信息字段)>v

用户登录并登陆viewNumOne,填写姓名和地址,然后查看viewNumTwo和ViewNumTree。他们现在注销。当他们重新登录时,我希望他们直接进入viewColorBlue(这就是我遇到的问题)

(登录屏幕) 查看带有登录字段的控制器。登录后,他们会进入rootVC,这是一个选项卡,他们会进入第一个选项卡,即viewNumOne(这很好)

(根) 选项卡栏:

(第一个选项卡-选项卡栏[0]) viewNumNavController>viewNumOne(此处有名称/地址信息字段)>viewNumTwo>viewNumThree

(第二个选项卡-选项卡栏[1]) viewColorNavController>viewColorRed>viewColorBlue>viewColorWhite(此处有注销按钮)

下面是我尝试过但崩溃的代码:

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)

我花了20个小时才弄明白这一点,希望这能一直拯救其他人。您需要做的是重置选项卡栏的导航控制器的根视图控制器

这是第一步。假设用户登录到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)
希望这有帮助