从导航控制器中关闭推送视图

24

我有一个导航控制器,其中包含一个显示按钮的视图控制器。该按钮使用推送转换链接到另一个视图控制器,该转换会自动添加一个带有返回按钮的顶部导航栏。这一切都很好地工作。按下返回按钮会滑动第二个视图并返回到第一个。

在第二个视图控制器上有一个按钮,当按下时会运行一些代码并回调到第一个视图控制器。同样,这也能正常工作。

现在我只需要通过代码关闭第二个推入的视图,就像按下返回按钮一样。我尝试过使用dismissModalViewCcontrollerAnimated和dismissViewControllerAnimated,但它们都会关闭整个导航控制器,从而移除视图1和2(返回到我的主菜单)。

正确的方式是什么来滑动视图?


你能发布一下你用来测试的代码吗? - sch
6个回答

38

获取您的UINavigationController的引用,然后调用

- (UIViewController *)popViewControllerAnimated:(BOOL)animated

在它上面。


7
谢谢,这让我找到了正确的途径进行快速的谷歌搜索。 这个可以运行: [self.navigationController popViewControllerAnimated:YES]; - Darren
这对我来说仍然是向后移动了两个级别,而不仅仅是关闭最后推送的视图。 - Oscar

12

在Swift中,这将是调用该方法。

navigationController?.popViewController(animated: true)

3
如果我们使用push转场,那么就要使用popViewController。
@IBAction func backButtonClicked(_ sender: Any) {
    self.navigationController?.popViewController(animated: false)
}

2
在Swift中,您也可以调用以下内容:
self.navigationController?.popToRootViewControllerAnimated(true)

2

Objective-C是什么

[self.navigationController popViewControllerAnimated:YES];

跳转到第一个root控制器

[self.navigationController popToRootViewControllerAnimated:YES];

或者是针对具体控制器的一个可能的移动。
[self.navigationController popToViewController:(nonnull UIViewController *) animated:(BOOL)];

动画是移动控制器的特定过程。如果动画为false,则控制器将不会出现动画效果。 UIViewController必须来自于堆栈中的一个。


0
如果NavViewController与UIModalPresentationFullScreen一起使用,则下面的代码行将起作用。
self.navigationController?.dismiss(animated: true, completion: nil)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接