以下是我的ViewControllers作为fallows(对象):
run-app
- 使用标签栏+导航栏查看,也是ta栏的一部分; FirstViewController
- 仅使用导航控制器查看SecondViewController
- 仅使用导航控制器查看我想做的事(逻辑步骤):
来自ThirdViewController
(模态)的SecondViewController
从FirstViewController
推送ThirdViewController
<推送
SecondViewController
- 从popToRootViewControllerAnimated
弹出到ThirdViewController
(pop)
以下是我按步骤使用的代码:
在FirstViewController
类
FirstViewController
{li} 在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
我的问题出在第3点,当我执行pop to root视图控制器而不是从[self.navigationController popToRootViewControllerAnimated:YES];
转到ThirdViewController
时,它只会转到FirstViewController
。
答案 0 :(得分:0)
在第1步中,您创建了新的UINavigationController实例,并将secondViewController设置为rootViewController。所以现在在第2步中,当你推动第三个ViewController时,它将被添加到secondViewController的导航堆栈中。 最后在步骤3中,当您调用“popToRootViewControllerAnimated”时,它将弹出到secondViewController,因为secondViewController是导航的rootViewController。
在self.navigationController上转到FirstViewController调用“dismissViewControllerAnimated”。
请参阅以下代码。
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
答案 1 :(得分:0)
忘掉第一步吧。即使您以模态方式呈现视图控制器,您也可以将其作为根视图控制器,直到您将其解除为止。
您正在从第二个VC导航控制器推送它。
如果弹出它,你将返回第二个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导航堆栈中将添加另一个导航控制器。此时,当您在secondVC中调用self.navigationController
时,第二个VC导航控制器将被引用