Ios 从模式视图推送视图,然后从popToRootView推送视图
以下是作为休耕(对象)的我的ViewController:Ios 从模式视图推送视图,然后从popToRootView推送视图,ios,objective-c,uinavigationcontroller,storyboard,Ios,Objective C,Uinavigationcontroller,Storyboard,以下是作为休耕(对象)的我的ViewController: FirstViewController-使用选项卡栏+导航栏查看,也是ta栏的一部分 SecondViewController-仅使用导航控制器查看 ThirdViewController-仅使用导航控制器查看 以及我试图做的事情(逻辑步骤): 从FirstViewController显示SecondViewController(模式) 从第二视图控制器推送第三视图控制器(推送) poptrootviewcontrolleranim
-使用选项卡栏+导航栏查看,也是ta栏的一部分李>FirstViewController
-仅使用导航控制器查看SecondViewController
-仅使用导航控制器查看ThirdViewController
FirstViewController
显示SecondViewController
(模式)poptrootviewcontrolleranimated
-从ThirdViewController
弹出到FirstViewController
(弹出)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
I类中:
[self.navigationController popToRootViewControllerAnimated:YES];
我的问题是在第3点上,当我执行pop到根视图控制器时,而不是从
ThirdViewController
到FirstViewController
,它只会转到SecondViewController
,在步骤1中,您创建了新的UINavigationController实例,并将SecondViewController设置为它的根视图控制器。因此,现在在步骤2中,当您按下第三个ViewController时,它将被添加到secondViewController的导航堆栈中。
最后,在步骤3中,当您调用“PoptorootViewController激活”时,它将弹出到secondViewController,因为secondViewController是导航的rootViewController
要转到FirstViewController,请在self.navigationController上调用“dismissViewControllerAnimated”
请参考下面的代码
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
忘记第一步吧。即使您以模态方式呈现视图控制器,也会使其成为根视图控制器,直到您将其关闭为止
[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导航控制器将处于参考状态,这很简单。你从第二个开始推,当你跳到第三个时,你返回到第二个。因为当你推的时候,self.navigationController将有secondView控制器的实例,但不是第一个。发布一个带有代码示例的正式答案,以便我可以投票