A→B→C→Aと画面遷移するのですが、C→Aと画面遷移する際にB,Cを閉じることでAを表示させた方がいいとおもうのですが、まとめて閉じる方法が分からなくて困っています。
検索してみても一つの画面を閉じる方法ばかりヒットしてしまい見つけることができない状況です。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/19 02:37
2018/06/19 06:59
2018/06/19 07:02
2018/06/19 07:24
回答4件
0
特にナビゲーションコントローラー等を使っていない場合ですと
swift
1/// 最初の画面に戻ります。 2self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
swift
1/// 一応これで最初のVCのインスタンスを取得できます。 2let rootVC = self.view.window?.rootViewController as! TESTViewController 3
投稿2018/06/19 15:58
総合スコア37
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/20 00:56
2018/06/20 01:03
2018/06/20 01:16
2018/06/20 01:23
2018/06/20 01:42
0
ベストアンサー
やるなら順番に閉じるのが無難かな、と。
Cは普通にdismiss(ボタン押したとき)
swift
1@IBAction func tapped(_ sender: UIButton) { 2 self.dismiss(animated: true) { 3 print("dismissed") 4 } 5}
Bは自動で閉じる
dismiss
は、Aから遷移してきたのか、Cから戻ってきたのかを判定するフラグです。(簡易に作っているので何か問題出るかも知れません)
swift
1class ViewControllerB: UIViewController { 2 var dismiss = false 3 override func viewDidAppear(_ animated: Bool) { 4 super.viewDidAppear(true) 5 if dismiss { 6 self.dismiss(animated: true) { 7 print("dismissed (auto)") 8 } 9 } 10 dismiss = !dismiss 11 } 12}
投稿2018/06/19 08:13
総合スコア16731
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/19 08:15
2018/06/20 01:02
2018/06/20 01:05 編集
2018/06/20 01:36
2018/06/20 01:51 編集
2018/06/20 02:01
0
閉じるというのはModal
のことですかね。
ナビゲーションだったら????
swift
1navigationController?.popToRootViewController(animated: true)
本来Modal
の目的には一時的な画面で終わったら閉じるという動きが通常だと思います。
モーダルを重ねるUI
にするのでしたら画面遷移のフローを見直すというのも考え方だと思います。
ですが、頑張ればできますのでコードを載せておきます。
※ ちょっと無理がありますので、アニメーションで閉じるときは下の画面が見えます、参考にしてみてください。
swift
1 2import UIKit 3 4class TopViewController: UIViewController { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 } 10 11 @IBAction func dismiss(_ sender: UIButton) { 12 13 // 全てのモーダルを閉じる 14 dismissAll(animated: true) { 15 16 } 17 } 18} 19 20 21extension UIViewController { 22 func dismissAll(animated: Bool, completion: (() -> Void)?) { 23 24 var presentingViewController = UIApplication.shared.topViewController?.presentingViewController 25 guard let _ = presentingViewController?.presentingViewController else { 26 completion?() 27 return 28 } 29 30 while let presenting = presentingViewController?.presentingViewController { 31 presentingViewController = presenting 32 } 33 presentingViewController?.dismiss(animated: animated, completion: { 34 completion?() 35 }) 36 } 37} 38 39extension UIApplication { 40 var topViewController: UIViewController? { 41 guard var topViewController = UIApplication.shared.keyWindow?.rootViewController else { return nil } 42 while let presentedViewController = topViewController.presentedViewController { 43 topViewController = presentedViewController 44 } 45 return topViewController 46 } 47}
投稿2018/06/18 22:47
編集2018/06/18 23:37総合スコア8490
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。