ねこ島

iOSのこととか、日常について雑に書きます

iOS14で戻るボタンに長押しアクションが追加された

iOS14では、UINavigationBarの戻るボタンを長押しすることでスタックされているViewControllerの一覧がメニューとして自動的に表示されるようになります。

f:id:nekowen:20200802004222p:plain

iOS13までは戻るボタンを押すと、一つ前の画面にしか戻ることができませんでしたが、この機能により、ユーザーが戻りたい画面を自由に選択することができるようになりました。

メニューに表示されるタイトルは、以下に設定されているタイトルから自動で選ばれます。

  • .backBarButtonItem.title
  • .backButtonTitle
  • .title

何も設定されていない場合、「戻る」がメニューに表示されます。

また現状この機能は無効にすることができませんので、戻るボタンを自作していない限りは必ず表示されます。

既存アプリの対応について

特別な対応をする必要はほとんどありませんが、アプリによってはいくつか確認すべき点がありました。

titleViewを使っていないか?

titleに直接タイトルを設定せず、代わりにtitleViewを使用しているケースがあると思いますが、この場合メニューにタイトルが設定されません(戻るになる)。

WWDCのセッションでは、この場合backButtonTitleの使用を検討して欲しいと説明されています。

backButtonTitleはiOS11からのプロパティとなるため、iOS10以下をサポートしている場合はbackBarButtonItemを使用しましょう。

戻れてはいけない画面がメニューに表示されていないか?

少なくとも僕の周りでこのような実装をしているアプリは見たことがないのでレアケースだと思うのですが、いろんな事情で特定の画面に戻れないように実装している場合。

コード的にはhidesBackButton = trueが存在している場合です。

戻るボタンを隠していたとしても、その先の画面で戻るボタンが表示される機会があり尚且つスタックに積まれているとメニューから戻れてしまいます。

その場合はOSが提供する戻るボタンを使用しないか、UINavigationControllerのviewControllersから直接Viewを取り除くという荒技がありますが、推奨しません。

最後に

上記に当てはまらない場合でもQAは必須です。タイトルがおかしくなっていないか?想定しない画面は入ってないか?この辺りは最低限見たほうが良いです。

画面数が多いと大変ですが、予期せぬ不具合を起こさないためにもやっていきましょう。