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;
}
我想在某些特定情况下从标签栏控制器替换视图控制器。这是我的代码。
-(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;
}