この本を見ながら進めてる↓
前回⇒「【Swift奮闘記ep39】図鑑アプリを作ってみたpart1(UIKitフレームワーク)」
図鑑アプリはいきなり難易度がアップで、聞いたこともないメソッドが何個も出てきて苦戦。
だが、これも慣れだと思うので、たくさんのメソッドに触れれば触れるほど理解が深まると予想。
では後半戦!
画面遷移の作成
今からやる事は3つ。
- 詳細画面のシーンの作成
- UINavigationControllerの作成
- 一覧画面と詳細画面の画面遷移の作成
これらが終わったら詳細画面を作り込んで完成だ。
詳細画面のシーンの作成
新たにViewControllerをドラッグして作成するだけだった。
UINavigationControllerの作成
メニューから作成。簡単。
一覧画面と詳細画面の画面遷移の作成
いわゆるセグエの作成について。
これもプログラミングが必要ではなく視覚的に処理できるので楽ちんだ。
Controlキーを使ってドラッグして「一覧画面」と「詳細画面」を繋いでやればいいだけ。
詳細画面の作成
詳細画面のシーンを作成して一覧画面からの遷移を設定したが、詳細画面をより完成に近づけていく。
- 詳細画面のシーンに紐づくビューコントローラのクラスを作成
- 作成したDetailViewControllerクラスとStoryboardのシーンを関連付ける
- ラベルの設置、レイアウト、アウトレット接続
まあこの辺はただの作業だよね、頭は大して使わない。
一覧画面から詳細画面への値の受け渡し
詳細画面にdescriptionを表示させる作業を行う。
この辺から難しくなる。
一覧画面でタップされたセルの情報(AnimalInfoインスタンス)を詳細画面のAnimalInfo型プロパティに代入すれば、データが受け渡されたことになる。
これが大きな流れなので覚えておきたい。
具体的にどんな作業をするかというと
詳細画面にプロパティを設置(var info: AnimalInfo!)
使う時には値が空でない事を表現できる強制的なアンラップができるOptional型としている。→つまりinfoプロパティは空になる場合は無いので強制的アンラップいつでもできますよ、Optional型にしても大丈夫ですよって事だろうか。
詳細画面のラベルや、ナビゲーションバーの表示を編集
詳細画面に動物の詳細情報やナビゲーションバーにタップした動物名を表示させたりする。
info.nameとかinfo.descriptionといった書き方は基本編で習ったやり方なので理解できると思う。
値の受け渡し
最後の難関。
prepareメソッドがセグエの処理が行われる直前に実行される。
つまり詳細画面に移る直前に以下の処理が行われる。
- もしタップされてインデックス番号(値)があったら、ダウンキャストする。
- controller.infoに、itemsに格納されている情報を代入する。
ダウンキャストする意味がさっぱりわからない。
destinationViewControllerの型はUIViewControllerクラスになっています。これは、遷移先のビューコントローラがUIViewControllerクラスのサブクラスであったとしても、UIViewControllerインスタンスとして取得されることを意味しています。したがって、特定のクラスとして受け取りたい場合はダウンキャストする必要があります。
難しすぎる。
いつかわかるようになるのかしら。
取りあえずここまで実行!
実行
エラーが出てきた。
tableViewとitemsのところにUse of Unresolved…と出てきた。これはtableViewとitemsは定義されていませんよ、という意味らしい。
あれ?定義したはずだけどな、と思ったら、最後のコードを書くのがDetailViewControllerクラスではなくViewControllerクラスなので要注意。
これを直したらちゃんと実行できた。よかった。
図鑑アプリはこれにて終了。ちゃんちゃん。
コメント