ユーザーをアプリの最初の「スプラッシュ画面」(最初のビューコントローラ)に戻して、アプリを効果的に「リセット」できるようにしたいオフラインモードで動作します。アプリ内の任意の点から特定のビューコントローラに「巻き戻す」
通常、ユーザーを特定のView Controllerにプッシュバックするために巻き戻しセグを使用しますが、ストロークボードから明示的に作成する必要がある場合は、巻き戻しセグを正しく理解する必要があります。私は効果的にアプリケーションの任意の時点から巻き戻しを行う必要があり、私は何十ものビューコントローラのすべてに巻き戻しセグを追加したくありません。
プログラムでこれを行う方法はありますか?あなたは即座にリラックスセグを作ることができますか?
私の最初の試みは、アプリケーションの "トップ" UIViewControllerでdismiss
を再帰的に呼び出すことでした。それは技術的には動作しますが、クルージュのように感じられ、画面上で非常によく見えず、ポップされた各連続したビューコントローラでviewDidAppear
の呼び出しに関するさまざまな問題が発生します。ここにそのコードがあります。
extension UIApplication {
var topController: UIViewController? {
var topController = keyWindow?.rootViewController
while topController?.presentedViewController != nil {
topController = topController?.presentedViewController
}
return topController
}
// Recursively dismiss until some condition is met
func dismiss(until: @escaping ((UIViewController?)->Bool), completion: (()->Void)?) {
var proxy: (()->Void) = { }
let doDismiss: (()->Void) = {
if !until(self.topController) {
DispatchQueue.main.async {
self.topController?.dismiss(animated: false, completion: proxy)
}
} else {
completion?()
}
}
proxy = doDismiss
doDismiss()
}
}
そして、それはのように呼ばれています:
UIApplication.shared.dismiss(until: { (topController) -> Bool in
return topController is SplashScreenViewController
}, completion: nil)
は簡単な解決策はありますか?