我想在某些特定条件下从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:]只能选择标签栏控制器的视图控制器列表中的视图控制器。'
任何人都可以知道我的代码有什么问题吗?
答案 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;
}