前回のを書いてからやや半年?
もっと?

副業やらなんやらをしながらなんとか生き延びています。
4月には転職を果たして、現在はAndroidアプリを開発しています。
AndroidとKotlinにどっぷりです。

さて、Android開発といいつつ今回はiOSのお話です。

毎回やりだしにハマる、UINavigationBarの戻るボタン…

AndroidならばToolbarに設定してやれば済む話なんですが、
iOSの場合はコードベースではなくStoryBoardのGUIベースになってしまって
なかなか戻るボタンの実装ができないものです。

よくやるミスとハマりどころは、UIViewControllerにUINavigationBarをつけてBackItemを設定するパターン。

これだとうまく動きません。
動かないポイントとしては3点。

1つ目は、UIBarButtonItemはViewControllerへ遷移する前に設定しないといけないため。
例として、 FirstVCからSecondVCに遷移するとして、SecondVCでこの設定を表示させたいときは
FirstVCで設定をしてからSecondVCへ遷移しないとうまく表示されません。

2つ目はStoryBoardがUINavigationController経由で表示させる設定になっていないこと。
これがかなりのハマりポイント!
StoryBoardの方は最初からUIViewControllerから始まり、
追加するViewの一覧にUINavigationBarなるものが存在してしまっているが故に
UIViewControllerのみのStoryBoard且つ自前のUINavigationBarを設定してしまうのですが、
実はUINavigationBarは自分で設定することは無いのです。

3つ目はsegueの貼り方
私は最初 Present Modally で貼っていたのでダメだったけど、これはshowを選びましょう。
なぜshowにしなかったかというと、Present Modallyで、属性のPresentationをFull Screenにしないと画面が下がってしまっていたから…

 

さて、上記3点を解決する方法はちゃんとあります!
ざっくりと言うと、UINavigationControllerを作成して、RootViewControllerを消して、最初のViewControllerをつけるだけ!

まずは、UINavigationControllerとUIViewControllerを用意します。
UINavigationControllerは何故かUITableViewControllerがひっついてくるので、これを消します。
消したら、NavigationControllerのRootViewControllerをUIViewControllerに設定します。

まずは、これでベースのViewControllerが完成します。

ここから、2つ目のViewControllerにsegueを設定すると勝手にバックボタンが作成されます!!
文字だけだとわかりにくいので、一連の流れを動画に残しました。

これでNavigation周りで悩むことはなくなるはず…
ついでにいうと、開発するViewControllerの親クラスはUIViewControllerです。
UINavigationViewControllerを継承するとバグってしまうのでお気をつけを…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.