完全关闭中间的视图控制器
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 阻止用户操作,但它没有动画。对我来说这已经足够了。
我找了好几天了。这是问题所在:
我有一个主页视图控制器。当它收到通知时,它会显示一个名为 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 阻止用户操作,但它没有动画。对我来说这已经足够了。