こんにちは!
プログラミング楽しい!!!!と発狂しそうになったちょこひです。

最近頭打ちの感覚があって結構焦っていたんですが
さっきすんなり課題クリアできてしまって。
嬉しさのあまり叫びそうになりました。

先生が近くにいたので小声で自慢しに行きました(ご満悦)


 
画面を閉じる


さて、今回は画面を閉じるメソッド
navigationcontroller?.popViewControllerAnimated(Bool)」と
dismissViewControllerAnimated(Bool, completion)」の違いを
おぼえがきします。

どちらも「自分自身を閉じる(Viewを閉じる)」
という動きに変わりはないのですが、ちょっとだけ用途が違います。

これ忘れてるといつかハマりそうだったのでちゃんと勉強し直しました。 



結論から言うと
・navigationController?.popViewControllerAnimated(Bool)
 →navigationControllerの階層を一つ戻る
・dismissViewControllerAcnimated(Bool, completion)
 → モーダルビューを閉じる
こうなります。


以下でちょっと詳しい話をしていこうと思います。



NavigationContoller


iOSエンジニアならかなりの頻度で目にするであろうコイツ。
便利ですよね、本当。
TableViewControllerとの相性がほんとにいいと思っています。

NavigationControllerはViewとViewの階層構造を管理してくれるので
・画面遷移の管理が比較的楽になる
・Segueで「show」を選ぶと、そのViewはNavigationControllerの支配下に入る
・ツリー構造で奥へ奥へ入っていく時は無敵
こんな特徴があります。


blog0710_1


こんな感じ。
popViewControllerAnimatedは、Viewを閉じるというより
一つ前の階層に戻るといった感じ。


ModalViewController


対して、モーダルビューは
Segueを設定するときに「present Modaly」を選択します。
これを選択すると、NavigationControllerの支配下に入らず、
ツリー構造とは別に独立して存在するイメージ。

ツリー構造は詳細へ、さらに詳細へ・・・といった場面で使うことが多いですが
モーダルはオプションだったり、詳細ではない画面を設定するときに使用します。

blog0710_2


先ほどの図と組み合わせるとこんな感じ。
dismissViewControllerはpopViewControllerよりも
「自分自身を閉じる」という要素が大きいです。

NavigationController内でdismissViewControllerを書いても全く反応しません。
逆に、モーダルビューでpopViewControllerを書いても反応しません。

同じ動きに見えますが、実際は用途が違います。


まとめ


今回は画面を閉じるときのメソッドについて
ちょこっとまとめました。

実はこれ、さっき課題をやっているときに3分くらいハマりました。
画面を閉じるとき→dismiss、とすぐ出てくるタイプだったので
もう一つのpopViewと両者の違いをおさらいできてよかった。

他にも閉じるメソッドってあったかしら・・・?

何か見つけたらまた追記します。



さて!吉祥寺に予約してたゲーム用品を受け取りに行くぞ〜!


ちょこひ