下面是我的UITabBarController
结构在情节提要中的图像。
现在在情节提要中,AboutUsViewController(UIViewController)
与我的tabBar按钮单击事件绑定在一起,即,如果我单击tabBar按钮,AboutUsViewController
正在打开,但是现在我的功能基于某些条件。我想在同一tabBar按钮单击上调用ContactRequstViewController
而不是AboutUsViewController
。
以下是我打开ContactRequstViewController
的代码。
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
if (tabBarController.selectedIndex == 2){
UIStoryboard *story = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];
ContactRequstViewController *contactVC = [story instantiateViewControllerWithIdentifier:@"ContactUsView"];
[self.navigationController pushViewController:contactVC animated:YES];
}
}
编写完上述代码后,我无法加载ContactRequestViewController
。
答案 0 :(得分:0)
如果您要根据自定义逻辑替换该选定选项卡上的根视图控制器,请尝试使用setViewControllers:animated:
中的UITabBarController
方法。
您可以执行以下操作:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.selectedIndex == 1 && tabBarController.viewControllers.count > tabBarController.selectedIndex) {
BOOL shouldShowContactVC = (BOOL)(rand() % 2);
NSMutableArray *viewControllers = [[tabBarController viewControllers] mutableCopy];
UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *newVC = nil;
if (shouldShowContactVC) {
newVC = [main instantiateViewControllerWithIdentifier:@"ContactUsVC"];
} else {
newVC = [main instantiateViewControllerWithIdentifier:@"AboutUsVC"];
}
if (newVC) {
[viewControllers replaceObjectAtIndex:tabBarController.selectedIndex withObject:newVC];
newVC.tabBarItem = viewController.tabBarItem;
[tabBarController setViewControllers:viewControllers animated:YES];
}
}
}
答案 1 :(得分:0)
根据我的经验,有时我们不使用tabbarVC,因为它不灵活,例如隐藏,显示或更改项目编号 >。因此,我们将NavigationVC设置为rootVC,您可以创建一个View,只需使其看起来像tabbarVC。 此视图更易于使用。您无需关心任何委托方法或其他任何方法。你可以做任何你想做的事。 就是这样。