質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1562閲覧

【Swift】純正メモアプリの画面遷移について

cafe_racer

総合スコア6

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/08/30 08:49

前提・実現したいこと

Swiftの画面遷移に関する質問です。
swift初心者でとりあえず、apple純正メモアプリと同じものを作ろうと試みています。
純正メモアプリは三層構造になっており、仮にFolderViewController,MemoViewController,DetailViewControllerと名付けるとします。
また、アプリを起動した時に初めに表示される画面は中間のMemoViewControllerとなっています。
現在この機能を再現しようとしています。

発生している問題・エラーメッセージ

以下のようにstoryboardを配置したのですが、実行すると赤丸のBackボタンが消えてしまいます。
原因はなんなのでしょうか?
segueとしてはMemoViewControllerの左上にあるBackボタンとFolderViewControllerが、FolderViewControllerのCellとMemoViewControllerが繋がっています。

イメージ説明

試したこと

1、MemoViewControllerにNavigationBarを置いてみましたが結果は同じでした。
2、BarButtonItemをLeftBarButtonに配置して再現しようとしたところ、Backを押すとpushは右から表示されます。
3、以下のような循環型で配置してみましたが、push設定しているにも関わらず画面表示が下からになります。
イメージ説明

2・3をCATransitionを用いて左から表示させようともしたのですが、そちらでもつまずき舞い戻ってきた次第です。
iPhone純正メモアプリを忠実に再現したいと考えています。
アドバイスよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/08/30 09:18

初期画面は何に設定していますか?
cafe_racer

2019/08/30 09:21

MemoViewControllerです。
t_obara

2019/08/30 09:34

初期画面をFolderにしないとFolderに「戻れ」ないのでは?
cafe_racer

2019/08/30 09:44

Folderが初期画面ではないのでBackItemが作動しないということでしょうか? もしそうならば、試したこと2・3でやったやり方で頑張るしかないのでしょうか?
guest

回答1

0

ベストアンサー

NavigationController配下の途中のViewControllerから表示を開始するのは、
Stroryboardの定義だけでは無理だと思います。

UINavigationControllerのカスタムクラスを作り、
そのviewDidLoadメソッドの中に、次のように
あらかじめ2つの画面を読み込んでしてセットする処理を書いておけば
途中の画面から表示して、Backで戻れると思います。

swift

1let folder = storyboard?.instantiateViewController(identifier: "Folder") 2let memo = storyboard?.instantiateViewController(identifier: "Memo") 3viewControllers = [folder!,memo!]

投稿2019/08/30 17:36

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cafe_racer

2019/08/31 10:06

カスタムクラスに上記のコードを入れるだけで再現できました!!!!! viewControllersの役割やnavigationControllerのカスタムクラスについて勉強するいい機会になりました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問