【问题标题】: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 行为。为什么要比第二个更早地解雇第一个?
  • 为什么?我希望用户解雇第二个,而不是返回父级而不是第一个。我也不希望他看到第一个,就像他移动到第二个时已经删除了一样。

标签: ios objective-c uiviewcontroller hierarchy presentviewcontroller


【解决方案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];
    }];
    

    【讨论】:

    • 这在技术上是可行的,但在关闭和呈现第二个视图控制器时会导致过渡效果不佳。请参阅我在 stackoverflow.com/questions/41827981/… 的回答,了解如何更好地为过渡设置动画。
    猜你喜欢
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2016-11-20
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多