以编程方式向选项卡栏添加选项卡

3

我有一个应用程序,初始视图控制器是UITabBarController

目前我在Storyboard中完成了所有的事情,但我想根据用户是否登录来编程添加选项卡到选项卡栏中。

我创建了一个TestViewController来测试这个功能。现在我有两个选项卡(如下图所示)。我想动态地在右边添加第三个选项卡。我将这段代码放在我的AppDelegate的didFinishLaunching方法中。根据打印语句,视图控制器已添加到选项卡栏,但在应用程序加载时它并没有出现在选项卡栏中。

有什么建议吗?

    func addTabTEST() {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let tabController = storyboard.instantiateViewControllerWithIdentifier("RootTabController") as! UITabBarController
    let TestVC = storyboard.instantiateViewControllerWithIdentifier("TestViewController") as! TestViewController
    let icon = UITabBarItem(title: "test", image: nil, selectedImage: nil)
    TestVC.tabBarItem = icon

    print("TAB CONTROLLERS 1: \(tabController.viewControllers)")

    tabController.addChildViewController(TestVC)
    tabController.viewControllers![2] = TestVC

    print("TAB CONTROLLERS 2: \(tabController.viewControllers)")

}

enter image description here

enter image description here

3个回答

3
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    let nav1 = UINavigationController()
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    let first: ViewController = mainStoryboard.instantiateViewControllerWithIdentifier("ViewController") as! ViewController
    nav1.viewControllers = [first]
    nav1.setNavigationBarHidden(true, animated: true)
    nav1.title = "first"

    let nav2 = UINavigationController()
    let second: SecondViewController = mainStoryboard.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController
    nav2.viewControllers = [second]
    nav2.setNavigationBarHidden(true, animated: true)
    nav2.title = "second"

    let nav3 = UINavigationController()
    let third: ThirdViewController = mainStoryboard.instantiateViewControllerWithIdentifier("ThirdViewController") as! ThirdViewController
    nav3.viewControllers = [third]
    nav3.setNavigationBarHidden(true, animated: true)
    nav3.title = "third"



    let tabController = UITabBarController()
    tabController.viewControllers = [nav1,nav2,nav3]
    tabController.selectedIndex = 0

    self.window!.rootViewController = tabController
    self.window?.makeKeyAndVisible()

1

这是针对Swift 4的

self.window = UIWindow(frame: UIScreen.main.bounds) let nav1 = UINavigationController() let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    let first = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
    nav1.viewControllers = [first]
    nav1.setNavigationBarHidden(true, animated: true)
    nav1.title = "first"

    let nav2 = UINavigationController()
    let second: HomeViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController2") as! HomeViewController2
    nav2.viewControllers = [second]
    nav2.setNavigationBarHidden(true, animated: true)
    nav2.title = "second"

    let nav3 = UINavigationController()
    let third = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController3") as! HomeViewController3
    nav3.viewControllers = [third]
    nav3.setNavigationBarHidden(true, animated: true)
    nav3.title = "third"



    let tabController = UITabBarController()
    tabController.viewControllers = [nav1,nav2,nav3]
    tabController.selectedIndex = 0

    self.window!.rootViewController = tabController
    self.window?.makeKeyAndVisible()

0

如果您不想使用UIStoryboard,并且您有三个视图控制器分别命名为oneVCtwoVCthreeVC,则可以使用以下方法(适用于Swift 5.3和iOS 14.2):

        let window = UIWindow(frame: UIScreen.main.bounds)
        window.backgroundColor = .systemBackground
        self.window = window

        // Put image path if you want to have an image on your TabBar for this view controller
        self.oneVC?.tabBarItem = UITabBarItem(title: "One", image: nil, selectedImage: nil)
        self.twoVC?.tabBarItem = UITabBarItem(title: "Two", image: nil, selectedImage: nil)
        self.threeVC?.tabBarItem = UITabBarItem(title: "Three", image: nil, selectedImage: nil)

        let tabController = UITabBarController()
        tabController.viewControllers = [oneVC, twoVC, threeVC]
        tabController.selectedIndex = 0

        self.window!.rootViewController = tabController
        self.window?.makeKeyAndVisible()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接