Tabbar替换视图控制器

时间:2016-03-04 10:58:39

标签: objective-c ios7

我想在某些特定条件下从tabbar控制器替换视图控制器。这是我的代码。

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{

   NSInteger selectIndex=[tabBarController.viewControllers indexOfObject:viewController];

 if (selectIndex==2) {

    UserObject * user=[[SharedClass sharedInstance] getUser];
    if (user.license_no.length>0 && user.insurance_no.length>0) {

        OfferRideVC *vc=[self.storyboard instantiateViewControllerWithIdentifier:@"OfferRideVC"];

        NSMutableArray *allviews=[[NSMutableArray alloc] initWithArray:[tabBarController viewControllers]];
        [allviews removeObjectAtIndex:selectIndex];
        [allviews insertObject:vc atIndex:selectIndex];
        [tabBarController setViewControllers:allviews];

      }


  }

  return YES;
}

但我的应用程序因此错误而崩溃。 ' NSInvalidArgumentException',原因:' - [UITabBarController setSelectedViewController:]只能选择标签栏控制器的视图控制器列表中的视图控制器。'

任何人都可以知道我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:4)

之所以发生这种情况,是因为您仍然在函数末尾返回 YES ,因此TabBar会尝试选择现在不在其ViewControllers列表中的viewController。

从if case返回 NO

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{

   NSInteger selectIndex=[tabBarController.viewControllers indexOfObject:viewController];

 if (selectIndex==2) {

    UserObject * user=[[SharedClass sharedInstance] getUser];
    if (user.license_no.length>0 && user.insurance_no.length>0) {

        OfferRideVC *vc=[self.storyboard instantiateViewControllerWithIdentifier:@"OfferRideVC"];

        NSMutableArray *allviews=[[NSMutableArray alloc] initWithArray:[tabBarController viewControllers]];
        [allviews removeObjectAtIndex:selectIndex];
        [allviews insertObject:vc atIndex:selectIndex];
        [tabBarController setViewControllers:allviews];

        // ViewControllers changed, return NO
        return NO;
      }


  }

  return YES;
}