完全关闭中间的视图控制器

Dismiss completly a view controller in middle

我找了好几天了。这是问题所在: 我有一个主页视图控制器。当它收到通知时,它会显示一个名为 noti1 的 NotiViewController,作者

`home.present(noti1, animated: true, completion: nil)`. 

15 秒后,另一个通知来了,我得到顶视图控制器 topVC,显示另一个名为 noti2 的 NotiViewController,由

`topVC.present(noti2, animated: true, completion: nil)`.

每个 notiVC 都有一个定时器,等待 30 秒后自行关闭。现在我有 Home -> noti1 -> noti2

15 秒后,noti1 时间用完,必须取消。如何在不中断正在呈现的 noti2 的情况下关闭它?

我试过了

`orderVC.beginAppearanceTransition(false, animated: false)
 orderVC.willMove(toParent: nil)
 orderVC.view.removeFromSuperview()
 orderVC.removeFromParent()
 orderVC.endAppearanceTransition()`

这些代码确实从屏幕上删除了视图,但留下了 UITransitionView,这会阻止用户操作。

此图像是在 noti2 从 superview 等中删除后拍摄的,因此有 2 个 UITransitionViews 正在呈现,阻止用户操作。

有什么想法吗?非常感谢。

找到方法了。我不确定我是对还是错,但这是我的想法:视图控制器必须以它之前呈现的方式被关闭。例如,如果您使用 present(viewController, animated, completion) 表示,则应使用 dismiss(animated, completion) 表示拒绝。就我而言,问题是如果您关闭视图控制器,所有子视图控制器也将消失。

我解决问题的方法是使用另一种方法 "show" 目标视图控制器: parentVC.view.addSubview(childVC.view) parentVC.addChild(childVC) childVC.didMove(toParent: parentVC)

添加一些视图控制器后,我得到了一个树 parentVC -> child1 -> child2 -> child3...如果我想关闭 child2,我的问题中的代码有效: child2.willMove(toParent: nil) child2.view.removeFromSuperview() child2.removeFromParent()

没有 UITransitionView 阻止用户操作,但它没有动画。对我来说这已经足够了。