2016-11-09 97 views
2

我想知道如何才能移除该应用程序当前不在的视图控制器?从另一个UIViewController中移除视图控制器Swift iOS

比方说,我从OldViewController继承到NewViewController。一旦NewVC加载,我该如何删除OldVC,而应用程序仍然在NewVC上?

+0

你想显示哪个控制器而不是OldViewController? – alexburtnik

+0

A - > B(以模态方式在A上呈现) - > C(以B的形式呈现),并且您想从C返回到A,对不对? – alexburtnik

+0

我刚刚编辑了帖子,提供了关于视图控制器层次结构的想法 – EvanOgo

回答

1

我试过unwind seguesdismiss 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) 
} 

结果:

enter image description here

相关问题