2
現在、アプリケーションが現在表示されていないView Controllerを削除するにはどうすればよいですか?他のUIViewControllerからView Controllerを削除するSwift iOS
ここで、私はOldViewControllerからNewViewControllerに切り替えます。 NewVCがロードされると、アプリがまだNewVC上にある間に、どうすればOldVCを削除できますか?
現在、アプリケーションが現在表示されていないView Controllerを削除するにはどうすればよいですか?他のUIViewControllerからView Controllerを削除するSwift iOS
ここで、私はOldViewControllerからNewViewControllerに切り替えます。 NewVCがロードされると、アプリがまだNewVC上にある間に、どうすればOldVCを削除できますか?
私は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