[英]Push view from modal view and then popToRootView
这是我的ViewControllers(休假对象):
FirstViewController
带有标签栏和导航栏的视图,也是ta栏的一部分; SecondViewController
仅使用导航控制器查看 ThirdViewController
仅使用导航控制器查看 而我正在尝试做的(逻辑步骤):
本SecondViewController
从FirstViewController
(模态)
推ThirdViewController
从SecondViewController
(推)
popToRootViewControllerAnimated
从ThirdViewController
弹出到FirstViewController
(pop)
这是我按步骤使用的代码:
在FirstViewController
类中
SecondViewController * secondViewController = [[UIStoryboard MainStoryboard] instantiateViewControllerWithIdentifier:NSStringFromClass([SecondViewController class])]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController: secondViewController]; [self.navigationController presentViewController: navigationController animated:YES completion:nil];
在SecondViewController
类中:
ThirdViewController * thirdViewController = [[UIStoryboard MainStoryboard] instantiateViewControllerWithIdentifier:NSStringFromClass([ThirdViewController class])]; [self.navigationController pushViewController: thirdViewController animated:YES];
在ThirdViewController
类中,我这样做:
[self.navigationController popToRootViewControllerAnimated:YES];
我的问题是在第3点上,当我执行弹出到根视图控制器而不是从ThirdViewController
到FirstViewController
它仅转到SecondViewController
。
在步骤1中,您创建了新的UINavigationController实例,并将secondViewController设置为其的rootViewController。 因此,现在在第2步中,当您推动ThirdViewController时,它将被添加到secondViewController的导航堆栈中。 最后,在第3步中,当您调用“ popToRootViewControllerAnimated”时,它将弹出至secondViewController,因为secondViewController是导航的rootViewController。
要转到FirstViewController,请在self.navigationController上调用“ dismissViewControllerAnimated”。
请参考下面的代码。
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
忘记第一个步骤。 即使您以模态方式显示视图控制器,也要使其成为根视图控制器,直到您将其关闭为止。
您正在从第二个VC nav控制器推送它。
如果弹出它,您将返回到第二个VC,因为第三个VC被推到第二个导航控制器上。
如果要转到第一个View控制器,请通过以下方式在第三个VC中再次显示第一个VC:
[self presentViewController:firstVC animated:YES completion:nil];
或者你可以解雇
[self.navigationController dismissViewController animated:YES completion:nil];
请注意,参考中不能有多个导航控制器。 您随时只能拥有一个。
即使您通过第一个VC导航控制器显示第二个VC
[self.navigationController presentViewController:secondVC animated:YES completion:nil];
您将在此处显示第二个VC导航控制器,因此,在第一个VC导航堆栈中,将添加另一个导航控制器。 此时,当您在第二个VC中调用self.navigationController
时,将引用第二个VC导航控制器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.