【发布时间】:2016-07-20 14:08:53
【问题描述】:
我想展示一个视图控制器:
- 模态
- 使用自定义过渡
- 同时,我想确保当它被解除时,它背后的视图控制器知道被推到前台。
我的基本想法是尝试一些不同的配置,看看哪一个会导致 viewWillAppear 在后面的视图控制器上被调用。
尝试 1
presentedViewController.modalPresentationStyle = .Custom
presentedViewController.transitioningDelegate = someTransitioningDelegate
这种方法的结果:
- 自定义过渡效果非常好
-
当我调用
presentedViewController.dismissViewControllerAnimated(true)时,viewWillAppearnot 不会在presentedViewController后面的视图控制器上被调用
我确实希望 viewWillAppear 在被关闭的视图控制器下方被调用,所以我这样做了:
尝试 2
presentedViewController.modalPresentationStyle = .FullScreen
presentedViewController.transitioningDelegate = someTransitioningDelegate
或
presentedViewController.modalPresentationStyle = .FullScreen
presentedViewController.modalTransitionStyle = .CoverVertical
presentedViewController.transitioningDelegate = someTransitioningDelegate
这种方法的结果:
-
viewWillAppear在关闭presentedViewController时在presentedViewController后面的视图控制器上被调用 - 当呈现视图控制器时,转换按预期发生。
- 关闭视图控制器时,过渡期间的背景为黑色,这是不希望的。
似乎.FullScreen 导致presentedViewController 后面的视图控制器从显示层次结构中移除——这很好,因为大概这就是触发viewWillAppear 调用的原因。
尝试 3
presentedViewController.modalPresentationStyle = .FullScreen
presentedViewController.modalTransitionStyle = .CoverVertical
这样的结果是:
-
viewWillAppear在presentedViewController后面的视图控制器上被调用。 - 过渡期间的背景是位于
presentedViewController后面的视图控制器,这是理想的。 - 没有自定义过渡。
我正在从事的项目的结构使得使用委托变得困难(这似乎是建议的答案here)。使用NSNotificationCenter 是另一种选择,它可以让我调用应该由viewWillAppear 调用的代码,但是从尝试3 开始,我希望有一种更优雅的方法来实现所有这些:
- 触发
viewWillAppear - 使用自定义过渡
- 在过渡动画期间查看在后台呈现的视图控制器
【问题讨论】:
标签: ios swift uiviewcontroller