2
我想知道如何才能移除该应用程序当前不在的视图控制器?从另一个UIViewController中移除视图控制器Swift iOS
比方说,我从OldViewController继承到NewViewController。一旦NewVC加载,我该如何删除OldVC,而应用程序仍然在NewVC上?
我想知道如何才能移除该应用程序当前不在的视图控制器?从另一个UIViewController中移除视图控制器Swift iOS
比方说,我从OldViewController继承到NewViewController。一旦NewVC加载,我该如何删除OldVC,而应用程序仍然在NewVC上?
我试过unwind segues和dismiss nested presentingViewController解决方案,但两者仍存在中间控制器在动画期间可见的问题。
然后我发现这suggestion,我修改了不同的快照生成,因为它不适合我。
可能不是最好的解决方案,但仍可能有所帮助。
助手扩展:
extension UIViewController {
func dismissModalStack(animated: Bool, completion: (()->Void)?) {
guard let snapshot = UIApplication.shared.delegate?.window??.snapshotView() else { return }
self.presentedViewController?.view.insertSubview(snapshot, at: Int.max)
self.dismiss(animated: true, completion: completion)
}
}
extension UIView {
public func snapshotImage() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0)
drawHierarchy(in: bounds, afterScreenUpdates: false)
let snapshotImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return snapshotImage
}
public func snapshotView() -> UIView? {
guard let snapshotImage = snapshotImage() else { return nil }
return UIImageView(image: snapshotImage)
}
}
用法:
在过去呈现视图控制器:
@IBAction func dismissPressed() {
self.presentingViewController?.presentingViewController?.dismissModalStack(animated: true, completion: nil)
}
结果:
你想显示哪个控制器而不是OldViewController? – alexburtnik
A - > B(以模态方式在A上呈现) - > C(以B的形式呈现),并且您想从C返回到A,对不对? – alexburtnik
我刚刚编辑了帖子,提供了关于视图控制器层次结构的想法 – EvanOgo