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