从模态视图推送视图,然后按popToRootView

时间:2016-03-25 16:13:30

标签: ios objective-c uinavigationcontroller storyboard

以下是我的ViewControllers作为fallows(对象):

  • run-app - 使用标签栏+导航栏查看,也是ta栏的一部分;
  • FirstViewController - 仅使用导航控制器查看
  • SecondViewController - 仅使用导航控制器查看

我想做的事(逻辑步骤):

  1. 来自ThirdViewController(模态)的SecondViewController

  2. FirstViewController推送ThirdViewController <推送

  3. SecondViewController - 从popToRootViewControllerAnimated弹出到ThirdViewController(pop)

  4. 以下是我按步骤使用的代码:

      {li}

      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
    1. 我在ThirdViewController * thirdViewController = [[UIStoryboard MainStoryboard] instantiateViewControllerWithIdentifier:NSStringFromClass([ThirdViewController class])]; [self.navigationController pushViewController: thirdViewController animated:YES]; 课程中做了:

      ThirdViewController
    2. 我的问题出在第3点,当我执行pop to root视图控制器而不是从[self.navigationController popToRootViewControllerAnimated:YES]; 转到ThirdViewController时,它只会转到FirstViewController

2 个答案:

答案 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)

忘掉第一步吧。即使您以模态方式呈现视图控制器,您也可以将其作为根视图控制器,直到您将其解除为止。

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

  2. 如果弹出它,你将返回第二个VC,因为第三个VC被推到第二个导航控制器上。

  3. 如果要转到第一个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导航控制器将被引用