PresentViewController 关闭不会回到以前的 viewController

Posted

技术标签:

【中文标题】PresentViewController 关闭不会回到以前的 viewController【英文标题】:PresentViewController dismiss doesn`t go back to previous viewController 【发布时间】:2018-01-09 18:12:08 【问题描述】:

在我的项目中,我们有三个窗口 A、B 和 C。我想从 A 推送视图 B,从 B 我想呈现视图 C。 我的代码: 视图控制器 A:

ViewControllerB *vcB = [[viewControllerB alloc] 
initWithNibName:@"ViewControllerB" bundle:nil];
[[self navigationController] pushViewController:vcB animated:YES];

查看控制器 B:

ViewControllerC *vcC = [[ViewControllerC alloc] 
initWithNibName:@"ViewControllerC" bundle:nil];
[self presentViewController:vcC animated: true completion: nil];

到目前为止一切都很好,但是当我关闭最后一个视图控制器时:

[[self presentingViewController] dismissViewControllerAnimated:NO completion:nil];

应用返回到第一个视图控制器 (vcA) 而不是第二个 (vcB)

我做错了什么? 谢谢各位。

【问题讨论】:

您的第一步应该是将视图控制器重命名为重要的名称。 A、B 和 C 非常难以理解,会引起混淆。 @Gabriel 您是否正确使用 UINavigationContoller,如果是,请分享更多详细信息,以便我提供帮助 【参考方案1】:

你一定在做一些你没有告诉我们的事情......

这按预期工作:

MyFirstViewController.m

- (IBAction)pushTapped:(id)sender 
    MyPushedViewController *vc = [[MyPushedViewController alloc] initWithNibName:@"MyPushedViewController" bundle:nil];
    [self.navigationController pushViewController:vc animated:YES];

MyPushedViewController.m

- (IBAction)presentTapped:(id)sender 
    MyPresentedViewController *vc = [[MyPresentedViewController alloc] initWithNibName:@"MyPresentedViewController" bundle:nil];
    [self presentViewController:vc animated:YES completion:nil];

MyPresentedViewController.m

- (IBAction)dismissTapped:(id)sender 
    [self dismissViewControllerAnimated:NO completion:nil];

点击MyPresentedViewController 中的“关闭”按钮会关闭显示的视图控制器(您的vcC),让我留在MyPushedViewController(您的vcB)... 不是MyFirstViewController(你的vcA)。

【讨论】:

【参考方案2】:

试试这个来关闭 vc

[self dismissViewControllerAnimated:NO completion:nil]

并用它来弹出

 [self.navigationController popToViewController:controller animated:YES];

【讨论】:

不工作...显然 self.navigationController 是 nil【参考方案3】:

[self presentingViewController] = Bvc ,所以在这里你实际上解雇了 B 而不是 C

 [Bvc dismissViewControllerAnimated:NO completion:nil];

但是 self = Cvc 所以在这里你只解雇 C

 [self dismissViewControllerAnimated:NO completion:nil];

【讨论】:

以上是关于PresentViewController 关闭不会回到以前的 viewController的主要内容,如果未能解决你的问题,请参考以下文章

ios - 当 presentViewController 关闭时不起作用

PresentViewController 关闭不会回到以前的 viewController

presentViewController 不隐藏弹出框,弹出框出现在呈现的模态视图上

如何只关闭堆栈中的最后一个控制器而不一个一个地关闭

presentViewController:动画:完成:失败

使用 presentViewController 时有趣的 UIScrollView