以编程方式更改tabBar项目?

时间:2016-03-30 10:33:15

标签: ios swift uitabbar

我想在用户登录时更改TabBar Item

例如:我有5个不同的tabBar项目,都创建了一个故事板。

现在我想在用户没有帐户时更改带有索引2(或tag == 2)的tarBar。我想加载一个不同的rootViewController。 rootViewController不是我的TabBar的一个项目,我会加载一个完全不同的Controller。

最好的方法是什么?我可以通过以下方式简单地更改图标:

self.tabBar.items![0].selectedImage = UIImage(named: "icon_cal_grey")

但是如何更改rootViewController?

我应该在这里吗?

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {

    if item.tag == 1 {
        // ?
    }

}

或者应该生成一个UINavigationController作为RootViewController,并在这里加载“正确”的ViewController作为RootViewController?

4 个答案:

答案 0 :(得分:4)

您需要使用新的viewcontroller替换与 viewcontroller 关联的第二个标签页。这是示例代码,可以帮助您:

NSMutableArray *viewControllers = [[NSMutableArray alloc] initWithArray:self.tabBarController.viewControllers];
UIViewController *newVC = [UIViewController new];
UINavigationController *newNav = [[UINavigationController alloc] initWithRootViewController:newVC];
[viewControllers replaceObjectAtIndex:1 withObject:newNav];
self.tabBarController.viewControllers = viewControllers 

答案 1 :(得分:3)

检查用户是否已登录,然后更改UITabBarController的视图控制器:

tabbarController.viewControllers?.replaceRange()

这也可以帮助Set view controllers of UITabBarController in Swift

答案 2 :(得分:1)

试试这个:

self.tabBar.selectedIndex = 0

如果你想改变viewController

答案 3 :(得分:0)

下面是Swift的代码

        let tabViewCntrls : NSMutableArray = ((self.tabBarController?.viewControllers)! as NSArray).mutableCopy() as! NSMutableArray

        let vcLogin = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginScreen") as! LoginScreen

        let navRootVC = UINavigationController.init(rootViewController: vcLogin)

        navRootVC.viewControllers = [vcLogin]

        tabViewCntrls.replaceObject(at: 1, with: navRootVC)

        self.tabBarController?.viewControllers = tabViewCntrls as? [UIViewController]