テーブルビューの画面遷移 segue(セグエ)遷移するごとに新しい画面が表示される

こころの健康状態を簡易チェックするための iPhone(アイフォーン)アプリを作っているのですが、テーブルビューを使った簡易問診(アンケート)フォームの話です。

その簡易問診フォームにはTableView(テーブルビュー)というものを使っていて、そのテーブルビューに配置するためのCustom Cell(カスタムセル)を作って文字列を表示させています。そして最終行の【結果画面へ】と記載されたセル(行)を押すと、フォームで該当するところにチェックした数によって、結果画面が変わるという作業をしています。

下記画像がその簡易問診フォームです。

こころの健康アプリのアンケート(簡易問診)フォーム

この画面の最下部に、【結果画面へ】という行があり、それを押すことで診断結果ページへ遷移します。

そして、簡易問診フォームのチェックをつけた数によって、次の画面をレベル1からレベル4まで分けて表示しています。

問題は、新しいページを表示するときに今まで表示されていたページの上に新たな画面がスクリーン下から上の方へニョキっと上がってくることです。

画面遷移(リンクによる画面移動)を調べたウェブサイトに載っていたコードを参考に使ったのですが、どのサイトを見ても同じように書かれていて、普通に、例えばパソコンでページ内リンクをクリックすると、ブラウザ画面に今まで表示されていた画面は消えて、新しい画面が表示される方法は書かれている記事がありませんでした。

画面遷移にはsegue(セグエ)と呼ばれる方法で行っています。

セグエとは

Xcodeでは1つの画面のことをScene(シーン)と呼ぶ。セグエとは、シーンとシーンを接続し画面遷移を行うための部品である。
参照:
【https://hajihaji-lemon.com/smartphone/swift/segue/Swift】Segueの使い方。シーンとシーン接続して画面遷移をする。
URL:https://hajihaji-lemon.com/smartphone/swift/segue/

https://hajihaji-lemon.com/smartphone/swift/segue/

StoryBoard(ストーリーボード)と呼ばれる編集画面で実際に各 Scene(シーン) が表示されているのが下記画像です。シーンとは、私も初心者でよく理解していないのですがどうやら、簡単に言えばアプリの各画面のことらしいです。

下記はシーンについての引用文です。 SceneKit というものを使った時の解釈です。

SceneKitを扱ううえで必要な最も基本的な理解は、その名前の由来ともなっているシーンについてのものです。日本語でも「シーン」という語は「映画のシーン」といった組み合わせでよく使います。SceneKitのシーンも、まさにそのシーンです。
 例えば「その時の状況を映画の1シーンのようにはっきりと憶えている」というフレーズがあります。この「シーン」には、どこに何があって、誰がどこにいた、といったようなその場の人や物の配置だけでなく、その場の状況をどこか特定の場所から見た映像というニュアンスが含まれています。つまり、シーンを構成する重要な要素としてはカメラも含まれていることになります。それはSceneKitのシーンも同じです。さらに言えば、その状況の雰囲気を醸し出す光の具合も重要です。映画のシーンで言えば、明るかったのか、暗かったのか、どの方向からどのような光が差し込んでいたのかといった状態です。やはりSceneKitのシーンでも光源の設定が重要です。
 以上のことから、シーンを構成する3大要素を挙げるとすれば、その場にある物体(床や地面、壁も含む)、その場を照らす光源、それを撮影するカメラということになります。

引用元:「 ASCII.jp:SceneKitの基礎シーンビュー、シーン、ノードを理解する|Swift Playgroundsで学ぶiOSプログラミング 」

URL: https://ascii.jp/limit/group/ida/elem/000/001/714/1714893/

https://ascii.jp/limit/group/ida/elem/000/001/714/1714893/
Xcode(エックスコード)内のMain StoryBoard(ストーリーボード)の様子です。

この画像の画面がStoryBoard(ストーリー・ボード)と呼ばれる編集画面で、視覚的に各シーンを編集することができます。

ちょっと細くてわかりづらいのですが①と②との間を結ぶ線が矢印のところに引かれています。この線のことをセグエと呼びます。

言うなれば、セグエとはシーン(画面)とシーン(画面)を結び付けて、ホームページでいうところのリンクを貼ることができる機能です。

遷移先のシーンにセグエのIDをつけて遷移元のシーンに記載するコードの中にそのIDを入れておくと、そのコードが実行された時にそのIDを持つシーン(画面)へと画面遷移することができます。

ここまではなんとか時間がかかりながらもできたのですが、遷移先の画面が開くときに、新しいシーンが下からニョキっと湧き上がってきます。

下の画像はその新しいシーンが出た時のものですがシーン(画面)の一番上部を見てみると、前のシーンがわずかに見えています。時刻が表示されているところです。

ご覧の通り、下から湧き上がってきた画面には一番上のツールバーは無く、戻るボタンもありません。

このシーン(画面)を閉じるには指でシーン(画面)の上を触りそのまま下へなぞらなければなりません。

パソコンのブラウザでサイトを見るときのように、古い画面は消えて画面の内容だけ新しくならないものかと調べたのですが、今まで調べたサイト全てがこの下からニョキっと新しいシーン(画面)を表示するものでした。

つまり 遷移するたびに常に新しいシーン(画面)が開くことになり、前の画面は表示されたまま、新しいシーン(画面)の下に存在することになります。

新しく開いたシーン(画面)を指でなぞって下へスワイプ(画面を指で触れて上下左右に触ったまま動かす行為)する事で前の画面に戻れるのはいいのですが、そういった操作に慣れていない人にとっては、下にスワイプして画面を消すということかわからずに、その画面から先へと進めず、後にも戻れなくなるのではないかと心配です。

スワイプとは

スワイプとは、マルチタッチインターフェースにおける操作のうち、画面に触れた状態で指を滑らせる操作のことである。

一般的に、スワイプは画面を前後に移動するといった操作に多く用いられている。例えば、スマートフォン向けアプリの画像ビューアーの多くは、画面をスワイプすることで次の画像や前の画像を表示できるようになっている。

参照元:Weblio(ウェブリオ)辞書「スワイプ」より
URL:https://www.google.co.jp/amp/s/www.weblio.jp/content/amp/%25E3%2582%25B9%25E3%2583%25AF%25E3%2582%25A4%25E3%2583%2597

そして、アプリを先へ先へと進めていくと、新しく開いたシーンが何枚も十何枚も積み重なって行ってしまいます。

アンドロイドのスマートフォンと違って、アイフォーン向けのアプリですから、一定以上の性能は保証されており、十数枚のシーンを開いても動作に影響が及ぶとは考えにくいですが、やはり十数枚ものシーンが表示されたままになりそのシーンにはツールバーもないというのは、あまり良いこととは思えません。

何とか、古いシーンが消えて新しいシーンを表示させる方法がないか、これからもっと調べていきたいと思います。

コメント