对于某些特定条件,我想从标签栏控制器替换视图控制器。这是我的代码。
-(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,而该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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句