【发布时间】:2019-09-18 12:25:02
【问题描述】:
一些RootViewController 提供ParentViewController,而不是提供ChildViewController。
如何在不再次显示ParentViewController 的情况下将ChildViewController 动画 直接发送到RootViewController?
详细说明
- 假设 some 提供了
ParentViewController,它允许用户输入一些凭据以登录到某个用户帐户。 - 建立连接后,
ParentViewController会显示ChildViewController,向用户显示连接/帐户详细信息 - 当用户关闭
ChildViewController时,它应该被动画(向下滑动等)关闭。但与其返回ParentViewController,不如直接返回RootViewController
当然,ParentViewController 本身并不存在ChildViewController,但(不知何故)告诉RootViewController 这也是可能的。这样从ChildViewController直接返回到RootViewController就没有问题了。然而,这不是我正在寻找的,因为RootViewController 不应该知道ChildViewController 甚至不在乎ParentViewController 是否代表其他 VC。
我正在寻找一种解决方案,其中ParentViewController 控制是否在其呈现的 VC 或其父级(= 根 VC)被解散后显示自身。
代码:
typealias CompletionBlock = () -> Void
class RootViewController: UIViewController {
@IBAction func showParentVC(_ sender: Any) {
let parentVC = ParentViewController()
parentVC.completion = {
self.dismiss(animated: true, completion: nil)
}
present(parentVC, animated: true)
}
}
class ParentViewController: UIViewController {
var completion: CompletionBlock?
@IBAction func showChild(_ sender: Any) {
let childVC = ChildViewController()
childVC.completion = {
self.completion?()
}
present(childVC, animated: true)
}
}
class ChildViewController: UIViewController {
var completion: CompletionBlock?
@IBAction func close(_ sender: Any) {
completion?()
}
}
使用此代码不会解决所描述的问题。如果在ChildViewController 上调用close,则RootViewController 调用self.dismiss(animated: true, completion: nil)。这样ChildViewController 动画消失,ParentViewController 变得可见。然后ParentViewController 动画消失,RootViewController 变得可见。
如何跳过ParentViewController,在动画掉ChildViewController后直接显示RootViewController?
【问题讨论】:
-
您的解释与文档冲突。上面写着“如果您连续呈现多个视图控制器,从而构建一组呈现的视图控制器,则在堆栈中较低的视图控制器上调用此方法会关闭其直接子视图控制器以及堆栈上该子视图上方的所有视图控制器。当发生这种情况时,只有最顶层的视图会以动画方式消失;任何中间视图控制器都会简单地从堆栈中移除。
-
@ShreeramBhat 是的,我从文档中知道这段话。但是,当我使用上面发布的代码时,这不是我观察到的......这是一个错误还是文档过时或不完整(这不会太不寻常......)
标签: ios swift uiviewcontroller