2016-11-09 81 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

相關問題