0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TCAにおけるTabViewのタップ挙動を検討する

Last updated at Posted at 2024-04-06

はじめに

iOSアプリにおいてタブのUIを実装するためのAPIとして、UIKitではUITabBarController、SwiftUIではTabViewがそれぞれ提供されています。

タブUIにおいて、Apple標準アプリをはじめ多くのアプリではアクティブなタブをタップした際に次のような挙動がよく見られます。

  • 画面遷移している場合はルートまで画面スタックを戻す
  • 画面がスクロールされている場合は一番上までスクロールを戻す

output.gif

UIKitのUITabBarControllerを利用すると一部の挙動は勝手に対応してくれるのですが、SwifUIのTabViewでは何もしてくれないため、現状では開発者が頑張る必要あります。

また一方、SwiftUIアプリのアーキテクチャとしてpointfreeco/swift-composable-architectureによるTCA(The Composable Architecture)に人気が集まっているようです。個人的には最近触り始めた段階になります。

そこで今回は、TCAを採用したアプリで前述のTabViewでアクティブタプをタップした際の挙動の実装方法を検討しました。

実装

こちらにデモアプリを用意しました。

前提としている環境は次の通りです。

アプリではTabViewで2つのタブ(TabAとTabB)を実装しています。
どちらも前述の挙動を実現していますが、次のように若干異なる実装方法としています。

  • TabA: 単純に一覧画面から詳細画面へドリルダウンして行く画面遷移を想定し、NavigationLinkを利用
  • TabB: 何かしらのプレゼンテーションロジックを伴う画面遷移を想定して、Reducerを経由して画面遷移

output.gif

ポイント

まとめ

とりあえずは目的の挙動を実現できているとは思いますが、割と複雑な実装になってしまってる感があり不安もあります。
他の方法など何かありましたらご意見いただけると嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?