如何关闭我当前的视图控制器并在 iOS 中推送另一个视图控制器

0 uinavigationcontroller ios

我想关闭我当前的视图控制器并转到下一页?

即关闭当前视图控制器并将另一个视图控制器推入堆栈。

我可以使用以下代码关闭当前页面

[[self navigationController] popViewControllerAnimated: YES];
Run Code Online (Sandbox Code Playgroud)

但是在这之后打开一个新的控制器是行不通的。

ris*_*shi 5

同时在 self 上调用 push 和 pop 将不起作用,因为 self 已经被删除。您需要处理视图控制器堆栈 -

 UINavigationController *navigationController = self.navigationController;

 NSMutableArray *activeViewControllers=[[NSMutableArray alloc] initWithArray: navigationController.viewControllers] ;
 [activeViewControllers removeLastObject];

 // Reset the navigation stack
 [navigationController setViewControllers:activeViewControllers];

 [navigationController pushViewController:yourViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

除此之外,如果您不想要这个视图控制器,当从您的新视图控制器弹出时,您还有其他选项可用。

喜欢firstVC-> secondVC->thirdVC

现在从thirdVC如果你直接想来firstVC(跳过 secondVC,我相信这就是你想要 push 和 pop 的原因)。然后为此您可以使用 - popToViewController

[self.navigationController popToViewController:firstVC animated:YES];
Run Code Online (Sandbox Code Playgroud)

刚刚检查了同一主题已经有几个问题,您也可以参考这些问题以获得好的意见和答案-

如何在一次操作中从 UINavigationController 弹出视图并将其替换为另一个视图?

在同一动作中弹出和推送视图控制器

如何弹出一个viewController,然后通过委托推送一个viewController