【发布时间】:2019-07-08 00:30:51
【问题描述】:
我得到了以下流程
在主页选项卡选择晚上名为 [self.parentViewController.tabBarController setSelectedIndex:2]; 以转到课堂选项卡
在类选项卡中选择任何类
转到下一个 VC
再次选择家,再次选择晚上
从Home Tab 我执行[self.parentViewController.tabBarController setSelectedIndex:2]; 到Class Tab。然后从嵌入在NavigationController 中的类选项卡中,然后我将使用seague 转到下一个VC 并继续。
但是当我再次选择Home Tab 时,我希望Class Tab 回到RootViewController
我尝试了以下方法,但它不起作用。每次下一个 VC 消失时,它都会一直弹出到 RootViewController。
-(void) viewWillDisappear:(BOOL)animated {
[self.navigationController popViewControllerAnimated:YES];
[super viewWillDisappear:animated];
}
我有以下代码 MyTabBarController,它是由一位堆栈溢出大师给我的,但不确定每次选择新的 TabBarController 时在哪里调整以返回 RootViewController Class.m 选项卡。请帮忙。
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSLog(@"didSelectViewController... ");
//==== Tried this but not triggering =====
//[(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
//if ([viewController isKindOfClass:[UINavigationController class]]) {
//[self.navigationController popViewControllerAnimated:YES];
//}
//==========================================
NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
NSLog(@"controller title: %@", viewController.title);
if ([viewController isKindOfClass:[UINavigationController class]]) {
// we're expecting a nav controller so cast it to a nav here
UINavigationController *navController = (UINavigationController *)viewController;
// now grab the first view controller from that nav controller
UIViewController *firstViewControllerInNav = navController.viewControllers.firstObject;
// check to make sure it's what we're expecting (ParentViewController)
if ([firstViewControllerInNav isKindOfClass:[ParentViewController class]]) {
// cast it to our parent view controller class
[(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
ParentViewController *viewControllerToCallMethodOnAfterSelection = (ParentViewController *)firstViewControllerInNav;
[viewControllerToCallMethodOnAfterSelection doStuffWhenTabBarControllerSelects];
}else{
//=== The following code will make viewWillAppear load on each tab bar item
//=== Without it, tapping on new tab bar item will not load viewWillAppear
[(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
}
}
}
添加了以下代码,它会触发但不会将 selectedIndex = 2 带回 Root
-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
NSUInteger shouldSelectIndex = [tabBarController.viewControllers indexOfObject:viewController];
//Check if current index is Class tab and new index is Home
if (tabBarController.selectedIndex == 2 && shouldSelectIndex == 0) {
[self.navigationController popViewControllerAnimated:YES];
//[(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
//[tabBarController.viewControllers objectAtIndex:tabBarController.selectedIndex];
}
return YES;
}
添加了故事板
添加的文件结构
【问题讨论】:
-
你试过
viewController.navigationController吗?不确定您是如何安排故事板的,但如果每个选项卡都有自己的 navigationController 作为根目录,它应该可以工作 -
是的,每个选项卡都有自己的导航控制器,将
viewController.navigationController放在哪里? -
啊,我以为你的代码不工作,它工作但每次你点击新标签时它都会返回是吗?因此,您真正需要的是,您希望每次用户选项卡都不是
Class选项卡,那么Class选项卡应该回到根目录? -
在
Home Tab,我将单击buttonEvening,它将执行[self.parentViewController.tabBarController setSelectedIndex:2]并带我到Class Tab当我单击ClassVC上的链接时,它将执行segue到另一个VC1。当我单击主页选项卡时。我想让VC1回到ClassVC or RootView。如果不是,当我在HomeTab而不是ClassVC or RootView再次单击buttonEvening时,我将转到VC1。我的想法是选择HomeTabVC1返回ClassVC。 span>
标签: ios objective-c uinavigationcontroller uitabbarcontroller