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;
}
是的,我确实在didSelectViewController代表同样的事情,它工作正常。谢谢。 – bisma