Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 启动应用程序时更改tabbarindex或setviewcontroller_Ios_Swift_Uiviewcontroller_Uitabbarcontroller - Fatal编程技术网

Ios 启动应用程序时更改tabbarindex或setviewcontroller

Ios 启动应用程序时更改tabbarindex或setviewcontroller,ios,swift,uiviewcontroller,uitabbarcontroller,Ios,Swift,Uiviewcontroller,Uitabbarcontroller,如果用户!=零 我有两个可以更改的ViewController: 1) ProfileVC 2) SIGNNVC 但当我的应用程序启动时,用户会看到不同的viewController,他是NewsVC Me需要在运行应用程序之前进行检查,并在tabbar中替换viewController 在AppDelegate.swift中大致如此: let storyboard = UIStoryboard(name: "Main", bundle: nil) if Auth.auth().cur

如果用户!=零

我有两个可以更改的ViewController:

1) ProfileVC

2) SIGNNVC

但当我的应用程序启动时,用户会看到不同的viewController,他是NewsVC

Me需要在运行应用程序之前进行检查,并在tabbar中替换viewController

在AppDelegate.swift中大致如此:

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

    if Auth.auth().currentUser != nil {
        let profileVC = storyboard.instantiateViewController(withIdentifier: "ProfileVC")
        window?.rootViewController = profileVC
    } else {
        let loginVC = storyboard.instantiateViewController(withIdentifier: "SignInVC")
        window?.rootViewController = loginVC
    }
}

但这不是正确的方法。如何更改索引或viewController?

您需要对
UITabBarController
进行子类化,并管理其
viewController
数组

class MainTabBarController: UITabBarController {

    override func awakeFromNib() {
        super.awakeFromNib()

       // if you will say force - unwrapped it's the developer job to keep track here          

        let signUp = self.viewControllers![0]

        let profile = self.viewControllers![1]

        let newsFeeds = self.viewControllers![2]

        if user == nil {

            self.viewControllers = [signUp] // leave signup only

        }

    }


}

MainTabBarController
分配到IB中的选项卡

您需要为viewcontroller设置索引

这是您如何通过编程实现的:

    self.window = UIWindow(frame: UIScreen.main.bounds)
    let nav1 = UINavigationController()
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let profileVC = mainStoryboard.instantiateViewController(withIdentifier: "ProfileVC") as! //your VC
    nav1.viewControllers = [profileVC]

    let nav2 = UINavigationController()
    let loginVC = mainStoryboard.instantiateViewController(withIdentifier: "SignInVC") as! //Your VC 
    nav2.viewControllers = [loginVC]

    let tabController = UITabBarController()
    tabController.viewControllers = [profileVC, loginVC]
    tabController.selectedIndex = 0 //This line will solve your question & take you to the profileVC
    self.window!.rootViewController =  tabController
    self.window?.makeKeyAndVisible()

我有点明白,但这是怎么回事?