我正在创建一个iOS应用,我有 标签栏+侧边菜单 。
标签栏有5个项目,侧边菜单有12个菜单。
所有侧边菜单功能均来自标签1&可以在标签栏中的所有视图中访问侧边菜单。
这意味着如果我在Tab 2上,即使我可以访问侧边菜单。当我单击选项卡1中的侧面菜单项时,我将转到选项卡1,然后将进行导航。
我想要做的是,如果我点击侧面菜单中的Complains菜单,我想转到ComplainsViewController。
我使用的代码如下所示。
// go to first tab
self.tabBarController.selectedIndex = 0;
// now navigate
ComplainsViewController *sViewCon = [self.storyboard instantiateViewControllerWithIdentifier:@"Complains"];
CATransition *transition = [CATransition animation];
transition.duration = 0.5;
transition.type = kCATransitionFade;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[self.navigationController pushViewController:sViewCon animated:NO];
我有两种情况。
场景1(正确)
我在标签1上,点击侧边菜单中的Complains。当我点击时,我使用上面的代码成功转到ComplainsViewController。
场景2(正确)
我在Tab 2上,点击侧边菜单中的Complains。当我点击时,我成功进入选项卡1,但我没有导航到ComplainsViewController。当我单击返回选项卡2时,我看到在选项卡2中打开了ComplainsViewController。
知道如何首先切换到Tab然后导航到另一个viewcontroller?
以下是我的基本结构。
答案 0 :(得分:3)
在切换标签后,您似乎忘记切换planets <- c("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune");
str(factor(planets))
了。
尝试实施navigationController
方法:
UITabBarControllerDelegate
然后当您手动切换标签时,请使用以下代码:
- (void)tabBarController:(UITabBarController * _Nonnull)tabBarController
didSelectViewController:(UIViewController * _Nonnull)viewController {
self.currentNavigationController = (UINavigationController *)viewController;
}
为此目标,您需要创建新属性以保留// go to first tab
self.tabBarController.selectedIndex = 0;
// Manually call delegate method
[self tabBarController:self.tabBarController didSelectViewController:self.tabBarController.selectedViewController];
// now navigate
ComplainsViewController *sViewCon = [self.storyboard instantiateViewControllerWithIdentifier:@"Complains"];
CATransition *transition = [CATransition animation];
transition.duration = 0.5;
transition.type = kCATransitionFade;
[self.currentNavigationController.view.layer addAnimation:transition forKey:kCATransition];
[self.currentNavigationController pushViewController:sViewCon animated:NO];
。
答案 1 :(得分:3)
最后,我设法用另一种方式解决了 NSNotificationCenter
以下是我的所作所为。
第1步(在SideMenuViewController中)
// let first go to first index
self.tabBarController.selectedIndex = 0;
// now post notification and make transition
[[NSNotificationCenter defaultCenter] postNotificationName:@"TakeMeToComplains" object:nil];
第1步,将更改selectedIndex并发布通知。
步骤2(在所有其他视图控制器中)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(globalTakeMeToComplains) name:@"TakeMeToComplains" object:nil];
-(void)globalTakeMeToComplains {
// here I have code for Transition to go to ComplainsViewController
}
在第2步中,当我们切换到第一个标签栏时,在我收听通知的地方调用viewWillAppear。听到通知后,我将执行到另一个视图控制器的转换。
如果有人不清楚我在做什么,请告诉我。