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

Ios 从模式视图推送视图,然后从popToRootView推送视图,ios,objective-c,uinavigationcontroller,storyboard,Ios,Objective C,Uinavigationcontroller,Storyboard,以下是作为休耕(对象)的我的ViewController: FirstViewController-使用选项卡栏+导航栏查看,也是ta栏的一部分 SecondViewController-仅使用导航控制器查看 ThirdViewController-仅使用导航控制器查看 以及我试图做的事情(逻辑步骤): 从FirstViewController显示SecondViewController(模式) 从第二视图控制器推送第三视图控制器(推送) poptrootviewcontrolleranim

以下是作为休耕(对象)的我的ViewController:

  • FirstViewController
    -使用选项卡栏+导航栏查看,也是ta栏的一部分
  • 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];
    

    忘记第一步吧。即使您以模态方式呈现视图控制器,也会使其成为根视图控制器,直到您将其关闭为止

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

  • 如果您弹出它,您将返回到第二个VC,因为第三个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导航控制器将处于参考状态,这很简单。你从第二个开始推,当你跳到第三个时,你返回到第二个。因为当你推的时候,self.navigationController将有secondView控制器的实例,但不是第一个。发布一个带有代码示例的正式答案,以便我可以投票