前回のを書いてからやや半年?
もっと?
副業やらなんやらをしながらなんとか生き延びています。
4月には転職を果たして、現在はAndroidアプリを開発しています。
AndroidとKotlinにどっぷりです。
さて、Android開発といいつつ今回はiOSのお話です。
毎回やりだしにハマる、UINavigationBarの戻るボタン…
AndroidならばToolbarに設定してやれば済む話なんですが、
iOSの場合はコードベースではなくStoryBoardのGUIベースになってしまって
なかなか戻るボタンの実装ができないものです。
よくやるミスとハマりどころは、UIViewControllerにUINavigationBarをつけてBackItemを設定するパターン。
1 2 3 |
let back = UIBarButtonItem() back.title = "戻る" navigationItem.backBarButtonItem = back |
これだとうまく動きません。
動かないポイントとしては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を継承するとバグってしまうのでお気をつけを…