Tabbar替换视图控制器

问题描述:

我想替换视图控制器从TabBar控制器的一些特定的条件。这是我的代码。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:]只能选择标签栏控制器视图控制器列表中的视图控制器。'

任何人都可以有一些想法我的代码有什么问题吗?

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

从您的情况,如果返回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; 
} 
+0

是的,我确实在didSelectViewController代表同样的事情,它工作正常。谢谢。 – bisma