在当前可见之前关闭先前呈现的模态视图控制器

Posted

技术标签:

【中文标题】在当前可见之前关闭先前呈现的模态视图控制器【英文标题】:Dismissing previously presented modal view controller before currently visible one 【发布时间】:2015-11-03 10:15:31 【问题描述】:

我有 2 个 UIViewController's[self presentViewController:viewController animated:YES completion:nil]; 一起呈现,我想关闭其中的第一个,没有动画(无论如何用户都看不到),当第二个(当前可见)将被关闭时,用户将看到同时呈现它们的父视图控制器。

- Parent
  - First -> Dismiss first without animation
    - Second -> Dismiss second with animation

我该怎么做?

【问题讨论】:

你想关闭第一个视图控制器但想稍后关闭第二个? @Usama 是的......这就是我想做的。 如果此时你想关闭第二个,而是关闭第一个 viewController,那么第二个将被动画关闭,并且父级将可见(不再显示第一个)。这似乎正是您想要的 UI 行为。为什么要比第二个更早地解雇第一个? 为什么?我希望用户解雇第二个,而不是返回父级而不是第一个。我也不希望他看到第一个,就像他移动到第二个时已经删除了一样。 【参考方案1】:

使用您当前的视图控制器层次结构,如果第一个视图控制器将被关闭,它将自动关闭第二个视图控制器。如果您不想要这种行为,而不是让父级呈现第二个视图控制器。您可以使用[self.presentingViewController presentViewController:secondViewController animated:YES completion:nil]从第一个视图控制器执行此操作

【讨论】:

【参考方案2】:

为什么要这样做?

您应该这样做以获得更清晰的视图层次结构和更好的用户体验:

展示第一个视图控制器:

[self presentViewController:viewController1 animated:YES completion:nil];

关闭第一个并呈现第二个视图控制器:

__weak MyViewController *aBlockSelf = self;

[self dismissViewControllerAnimated:YES completion:^
    [aBlockSelf presentViewController:viewController2 animated:YES completion:nil];
];

【讨论】:

这在技术上是可行的,但在关闭和呈现第二个视图控制器时会导致过渡效果不佳。请参阅我在 ***.com/questions/41827981/… 的回答,了解如何更好地为过渡设置动画。

以上是关于在当前可见之前关闭先前呈现的模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

关闭当前的模态视图控制器,然后呈现新的模态视图控制器

Xcode 11.1 查看控制器在当前 VC 下可见时以模态方式呈现

UIViewController 在解除先前呈现的模态视图控制器后被释放

我应该在关闭视图之前关闭键盘吗?

通过模态视图呈现详细视图控制器 [关闭]

如何呈现具有透明背景的模态视图控制器