Tabbar 替换视图控制器

Tabbar replace view controller

我想在某些特定情况下从标签栏控制器替换视图控制器。这是我的代码。

-(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:] 只能选择选项卡栏控制器的视图控制器列表中的一个视图控制器。'

谁能知道我的代码有什么问题?

发生这种情况是因为您仍在函数末尾返回 YES,因此 TabBar 尝试 select viewController 现在不在其视图控制器列表。

Return NO 从你的 if 案例来看,

-(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;
}