单击UITabBarController的标签栏,调用不同的viewControllers

时间:2018-11-14 17:16:35

标签: ios objective-c uitabbarcontroller uitabbar

下面是我的UITabBarController结构在情节提要中的图像。

enter image description here

现在在情节提要中,AboutUsViewController(UIViewController)与我的tabBar按钮单击事件绑定在一起,即,如果我单击tabBar按钮,AboutUsViewController正在打开,但是现在我的功能基于某些条件。我想在同一tabBar按钮单击上调用ContactRequstViewController而不是AboutUsViewController

以下是我打开ContactRequstViewController的代码。

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
      if (tabBarController.selectedIndex == 2){
           UIStoryboard *story =  [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];
           ContactRequstViewController *contactVC = [story instantiateViewControllerWithIdentifier:@"ContactUsView"];
          [self.navigationController pushViewController:contactVC animated:YES];
      }
}

编写完上述代码后,我无法加载ContactRequestViewController

2 个答案:

答案 0 :(得分:0)

如果您要根据自定义逻辑替换该选定选项卡上的根视图控制器,请尝试使用setViewControllers:animated:中的UITabBarController方法。

您可以执行以下操作:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if (tabBarController.selectedIndex == 1 && tabBarController.viewControllers.count > tabBarController.selectedIndex) {
        BOOL shouldShowContactVC = (BOOL)(rand() % 2);
        NSMutableArray *viewControllers = [[tabBarController viewControllers] mutableCopy];
        UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UIViewController *newVC = nil;
        if (shouldShowContactVC) {
            newVC = [main instantiateViewControllerWithIdentifier:@"ContactUsVC"];
        } else {
            newVC = [main instantiateViewControllerWithIdentifier:@"AboutUsVC"];
        }
        if (newVC) {
            [viewControllers replaceObjectAtIndex:tabBarController.selectedIndex withObject:newVC];
            newVC.tabBarItem = viewController.tabBarItem;
            [tabBarController setViewControllers:viewControllers animated:YES];
        }
    }
}

答案 1 :(得分:0)

根据我的经验,有时我们不使用tabbarVC,因为它不灵活,例如隐藏显示更改项目编号 >。因此,我们将NavigationVC设置为rootVC,您可以创建一个View,只需使其看起来像tabbarVC。 此视图更易于使用。您无需关心任何委托方法或其他任何方法。你可以做任何你想做的事。 就是这样。