繁体   English   中英

从模式视图中推送视图,然后从popToRootView中推送

[英]Push view from modal view and then popToRootView

这是我的ViewControllers(休假对象):

  • FirstViewController带有标签栏和导航栏的视图,也是ta栏的一部分;
  • SecondViewController仅使用导航控制器查看
  • ThirdViewController仅使用导航控制器查看

而我正在尝试做的(逻辑步骤):

  1. SecondViewControllerFirstViewController (模态)

  2. ThirdViewControllerSecondViewController (推)

  3. popToRootViewControllerAnimatedThirdViewController弹出到FirstViewController (pop)

这是我按步骤使用的代码:

  1. FirstViewController类中

     SecondViewController * secondViewController = [[UIStoryboard MainStoryboard] instantiateViewControllerWithIdentifier:NSStringFromClass([SecondViewController class])]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController: secondViewController]; [self.navigationController presentViewController: navigationController animated:YES completion:nil]; 
  2. SecondViewController类中:

     ThirdViewController * thirdViewController = [[UIStoryboard MainStoryboard] instantiateViewControllerWithIdentifier:NSStringFromClass([ThirdViewController class])]; [self.navigationController pushViewController: thirdViewController animated:YES]; 
  3. ThirdViewController类中,我这样做:

     [self.navigationController popToRootViewControllerAnimated:YES]; 

我的问题是在第3点上,当我执行弹出到根视图控制器而不是从ThirdViewControllerFirstViewController它仅转到SecondViewController

在步骤1中,您创建了新的UINavigationController实例,并将secondViewController设置为其的rootViewController。 因此,现在在第2步中,当您推动ThirdViewController时,它将被添加到secondViewController的导航堆栈中。 最后,在第3步中,当您调用“ popToRootViewControllerAnimated”时,它将弹出至secondViewController,因为secondViewController是导航的rootViewController。

要转到FirstViewController,请在self.navigationController上调用“ dismissViewControllerAnimated”。

请参考下面的代码。

[self.navigationController dismissViewControllerAnimated:YES completion:nil];

忘记第一个步骤。 即使您以模态方式显示视图控制器,也要使其成为根视图控制器,直到您将其关闭为止。

  1. 您正在从第二个VC nav控制器推送它。

  2. 如果弹出它,您将返回到第二个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM