根据条件从tabbar项切换视图控制器

时间:2014-12-05 00:05:28

标签: objective-c segue tabbar

在我的iOS 7+应用程序中,我有一个4项UITabBarController。根据某些条件(myCondition),其中一个项需要转换为viewController_A 一个viewController_B。

我有一个TabBarController类,我已根据myCondition设置逻辑以更改item.image和item.title。代码工作正常,但我不知道如何将item1发送到viewController_A viewController_B

UITabBarController *tabBarController = (UITabBarController *)self;
UITabBar *tabBar = tabBarController.tabBar;
UITabBarItem *item0 = [tabBar.items objectAtIndex:0];
UITabBarItem *item1 = [tabBar.items objectAtIndex:1];
UITabBarItem *item2 = [tabBar.items objectAtIndex:2];
UITabBarItem *item3 = [tabBar.items objectAtIndex:3];

[这里有更多代码]

if (myCondition) {
        item1.selectedImage = myItemImageSel_B;
        item1.image= myItemImage_B;
        item1.title= myItemTitle_B;
    }
    else
    {
        item1.selectedImage = myItemImageSel_A;
        item1.image= myItemImage_A;
        item1.title= myItemTitle_A;
    }

目前通过故事板为所有4个项目设置了segues。

我使用正确的方法吗?或者我应该向viewController_B添加一个新项目并隐藏它直到我的条件为真?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您可以做的一种方法是在tabview内设置标记值,然后使用switch case statement而不是if else condition。它也会更快。

答案 1 :(得分:0)

您可以使用UITabBarControllerDelegate:

tabBarController.delegate = self

然后实现tabBarController:shouldSelectViewController:

- (void)configureTabbarItem:(UITabBarItem *)item image:(UIImage *)image selectedImage:(UIImage *)selectedImage andTitle:(NSString *)title {
item.selectedImage = image;
item.image = selectedImage;
item.title = title;
}

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
NSArray *items = tabBarController.tabBar.items;
if (MyCondition) {
    [self configureTabbarItem: items[0]
                        image: myItemImageSel_B
                selectedImage: myItemImage_B
                     andTitle: myItemTitle_B];
}
else {
    [self configureTabbarItem: items[0]
                        image: myItemImageSel_A
                selectedImage: myItemImage_A
                     andTitle: myItemTitle_A];
}
return YES;
}