MasterDitailをつかってTodoリストを作る。じぶんなりに。2

前回からの続き。

さて、Todoリストをの作り方で僕が一番悩んだのはタイトルや日付、内容といった複数の要素をどーやって保存してるんだろう?ってこと。
いろいろと調べて行き着いたのは、一つのtodoをNSDictionaryで作って、それをNSMutableArrayに入れて保存しているらしい。いわゆる入れ子構造なのかな?
色々とやりかたは有るんだろうけどそんな感じで進めていく。

まずは、StoryboardのDetail画面が寂しいのでテキストフィールドとテキストビューを設置する。
言うまでもなくUITextFieldは一行の入力画面で、UITextViewは複数行の入力画面です。
できればautoLayoutで位置の調整をしておきましょう。

スクリーンショット 2015-11-09 10.56.21

んで、2画面にして、プロパティを作ります。
テキストフィールドはtitleField、テキストビューはbodyTextViewにしました。
スクリーンショット 2015-11-09 10.59.51
スクリーンショット 2015-11-09 11.00.26
スクリーンショット 2015-11-09 11.01.26

これらのタイトルと内容を保持するNSDictionary形式のtodoプロパティを作りましょう。
ちなみにこれはMasterViewControllerからも使うのでヘッダファイルDetailViewController.hに作ります。

スクリーンショット 2015-11-09 11.09.50

さて、コードを書いていきます。
先ほど中身を削除したconfigureViewを再利用します。
Master画面の+ボタンで来た場合、todoの中身はありません。
なので無いことを確認して、新しく、todoを作って入力して表示させます。

内容を入力したら戻らないといけません。
保存ボタンを付けてMaster画面に戻れるようにします。
前回の+ボタンのようにbarButtonItemをDetail画面の右上に設置します。

スクリーンショット 2015-11-09 11.33.36

このボタンからセグエの復路を辿るのですが、MasterViewControllerにunwindToMasterメソッドがないとExitに接続できません。

スクリーンショット 2015-11-09 11.35.31

なのでMasterViewController.mにunwindToMasterメソッドを追加します。

これで保存からExitに繋がるようになります。
スクリーンショット 2015-11-09 11.45.11

そしてunwindToMasterメソッドに接続します。

スクリーンショット 2015-11-09 11.45.32

今回は元々あるMaster-Detail Applicationを使っているので保存せずに戻る為のボタンがすでに有りますが、自分で新たにViewを作った場合など、セグエを戻るルートが複数ある場合、ルートによってidentifierを設定しておいた良い場合があります。
一応今回もidentifierをsaveTodoとして設定しておきます。
詳しくはsegueで戻る時のidentifierの設定。こっちを見てね。

スクリーンショット 2015-11-09 11.49.19のコピー

Master画面に戻る前に書いた内容をtodoに入れます。
prepareForSegueメソッドはセグエの移動の前に呼ばれるメソッドです。

保存からMaster画面に戻ったらまずunwindToMasterメソッドに入ります。

すでにあるセルを呼び出して変更した場合と、新規でtodoを作ってきた場合で処理が変わるのですが、まずは新規でtodoを作ってきた場合の処理を書きます。

戻ってきたらDetailViewControllerのtodoを呼び出してinsetrNewTodoに渡します。
insertNewTodoでは、NSMutableArrayプロパティのobjectsがあるかどうか確認してなければ作ってからその中に格納しています。

最後に- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath メソッドでテーブルに表示される内容を変更します。

これで起動すれば+ボタンでDitail画面に行って、保存して戻ってくることが出来ます。
ただ、まだセルを選択してDitail画面に行った場合の処理を書いていないので正常動作しません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です