
[英]UITabBarController - Incorrect and Inconsistent Bounds of Child (Tab) ViewControllers
[英]Call different viewControllers on click of tab bar of UITabBarController
下面是情节UITabBarController
中我的UITabBarController
结构的图像。
现在在情节AboutUsViewController(UIViewController)
中, 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
以上代码后,我无法加载ContactRequestViewController
。
如果要基于自定义逻辑替换所选选项卡上的根视图控制器,请尝试使用UITabBarController
setViewControllers:animated:
方法。
您可以执行以下操作:
- (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];
}
}
}
以我的经验,有时我们不使用tabbarVC,因为它不灵活,例如hide , show或change items number 。 因此,我们将NavigationVC设置为rootVC,您可以创建一个View,只需使其看起来像tabbarVC。 此视图更易于使用。您无需关心任何委托方法或其他任何方法。 你可以做任何你想做的事。 就这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.