平屋真吾(171)3711この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。「Storyboardで始めるiPhoneアプリ開発シリーズ」の第五回目になります。TODO項目の入力画面とカスタムクラスの作成編」では、TODO項目を入力する画面と画面用のカスタムクラスを作りました。今回は入力したTODO項目をメイン画面に渡す方法を解説し、その方法を実装してTODOアプリを完成させます。Delegateパターン入力画面で入力されたTODO項目をメイン画面へ伝えるための仕組みを作っていきます。この伝達にはdelegate(デリゲート)パターンを使ってみたいと思います。delegateとは?delegateについて、Appleの公式ドキュメントには以下のように書いてあります。委譲)とは、あるオブジェクトがプログラム中でイベントに遭遇したとき、それに代わって、または連携して処理するオブジェクトのことです。今回のTODOリストアプリではsaveボタンを押したタイミングでメイン画面へ入力内容を伝える。入力画面を閉じてもらうことをメイン画面に依頼する。cancelボタンを押したタイミングで、入力画面を閉じてもらうことをメイン画面に依頼する。いう風に入力画面からメイン画面へ情報を通知する必要がありますがdelegateを使うことで実現することができます。UIAlertViewDelegatedelegateはもともと用意されているクラスにも使われているので参考にしてみます。UIAlertViewはユーザーにお知らせを表示したり、確認をとったりする時に使います。UIAlertViewにはdelegateが備えられていて、イベント発生の通知はdelegateを使って処理することができます。下の図は、メイン画面(ViewController)からAlertViewを表示してユーザーに確認をとり、「はい」か「いいえ」のどちらが押されたかによって処理を分けるアプリになります。このアプリにおいて、メイン画面はどちらのボタンが押されたのかを知りたいわけですが、UIAlertViewにはもともとdelegateが用意されているので、delegateで宣言されたメソッドをメイン画面のViewControllerに実装するだけで、どちらのボタンが押されたかを知ることができます。このように、通知を受ける側に予め定められているメソッドを実装するだけで通知を受けることができます。このdelegateパターンを使って、TODOリストアプリの入力画面からメイン画面への通知を実現していきます。AddItemViewControllerを編集するまずは通知する側(今回は入力画面)のクラスにdelegateのプロトコルを定義します。.hファイルを開きます。AddItemViewController.hファイルの下部の@endの下に下記の4行を追加してください。ここはdelegateプロトコルを定義している部分で、delegateメソッドを宣言しています。UITableViewControllerの上に以下のコードを追加します。UITableViewControllerの下に以下のコードを追加します。delegateには、後でメイン画面(MasterViewController)への参照をセットします。delegate;修正後のAddItemViewController.hは以下のようになります。*)item;@endこれでdelegateの宣言とプロパティの準備ができました。MasterViewControllerを編集する次に通知される側のクラスを編集していきます。MasterViewController.mファイルを開きます。さきほどAddItemViewController.hでAddItemViewControllerDelegateプロトコルの宣言を書きましたが、AddItemViewControllerDelegateプロトコルを実装することで通知を受けれるようになります。MasterViewController.mファイルにプロトコルを実装していきます。ファイルの先頭は以下のようになっていると思います。*_objects;}@endAddItemViewController.hをインポートする文を追加し、デリゲートプロトコルを準拠している旨を書き加えます。書き換え後のMasterViewController.mファイルの冒頭部分は以下のようになります。*_objects;}@endここでwarning(黄色い三角形のアイコン)が出るようになったかと思います。これは、AddItemViewControllerDelegateプロトコルを準拠しているけど、AddItemViewController.hファイルで宣言したデリゲートのメソッドの実装がまだできていないので出ています。次はデリゲートメソッドの実装をやっていきます。(void)insertNewObject:(id)senderメソッドは不要なので削除します。*)controllerメソッドを追加します。このメソッドは入力画面のcancelボタンが押された時にAddItemViewControllerクラス側から呼びます。入力画面を閉じる処理を担当します。item:メソッドを追加します。このメソッドもAddItemViewControllerクラスで宣言したものです。このメソッドは入力画面のsaveボタンが押された時にAddItemViewControllerクラス側から呼びます。入力画面の入力値の保存と、入力画面を閉じる処理を担当します。completion:NULL];}デリゲートメソッドの実装はこれで完了です。あとは入力画面への遷移する時に呼ばれるメソッドを少し修正します。sender:メソッドがあります。このメソッドはセグエで遷移する前に呼ばれます。}内を実行するようになっていますが、メイン画面から入力画面の画面遷移用のセグエにはidentifierをまだ設定していませんでしたので設定します。}}MainStoryboard.storyboardを選択し、standerdEditorとユーティリティエリアを表示させます。メイン画面から入力画面へのセグエを選択し、identifier項目にShowAddItemViewと入力します。identifierの設定ができました。MasterViewController.mファイルを表示させ、MasterViewController.mファイルの編集に戻ります。sender:メソッドを以下のように修正します。if文の条件式内の"showDetail"を"ShowAddItemView"に変更し、AddItemViewControllerインスタンスのdelegateプロパティに自分自身をセットしています。}}これでMasterViewController.mの修正はおしまいです。(IBAction)clickedCancelButtonメソッドにAddItemViewControllerDelegateのメソッドを呼び出すコードを追加します。item:メソッドを呼び出すコードを追加します。2つめの引数にはTextLabelに入力された文字列を渡します。(IBAction)clickedCancelButtonメソッドではaddItemViewControllerDidCancel:メソッドを呼び出します。修正後の両メソッドは以下のようになります。addItemViewControllerDidCancel:self];}これでコードの修正はおしまいです。実行するついに簡易版TODOリストアプリ完成しましたので、Runボタンをクリックして実行してみましょう。ここでiPhoneシミュレーターの言語設定が英語になっている場合は、日本語に変更します。シミュレーターのSettingsアプリを開き「General」→「International」→「Language」と辿り、日本語を選択します。Runボタンをクリックして実行してみましょう。(言語設定を日本語に変更した場合は日本語に変わっています。)追加ボタンを押して入力画面を開きます。TODOリストに追加したい項目を入力し、saveボタンを押して保存します。メイン画面遷移します。他にも3つ追加してみました。次はEditボタンを押してTableViewを編集モードにしてみましょう。左端の赤いアイコンをクリックして、Deleteボタンを押すと項目を削除出来ます。Doneボタンを押すと通常モードに戻ります。今回は簡易的なTODOリストアプリを作ってみました。無事に動かすことができましたでしょうか。画面や画面間の遷移をStorybordで作り、データの受け渡しや保存はコードを書いて実現しました。今回作ったTODOリストアプリは項目の追加と削除しか出来ません。入力したデータをファイルに保存する処理(データの永続化処理)を実装していないので、アプリを終了すると入力データは消えてしまいます。改良していくとしたら何を追加しますか。「期限や優先度の項目」や「項目をグループに分ける機能」でしょうか。「項目を並べ替える機能」や「期限前に通知で教えてくれる機能」などでしょうか。追加した機能がうまく動くように調整したりしながらアプリ開発を進めていきます。第一回目と第二回目で基本的な画面遷移を、第三回目から五回目までを使って簡易的なTODOリストアプリを作りました。(本記事)アプリを開発していく上で、Storyboardはどう活用していくのが良いのでしょうか。「ストーリーボード」を辞書で調べると、以下の様な説明が書かれています。テレビ広告表現のストーリーと場面を示す草稿。場面の絵とせりふがコマ割りで描かれる。「画面内のレイアウト」や「画面間の遷移」などの視覚的要素はStoryboardで作成し、それ以外のデータの操作等はコードを書いて実現するのが基本になると思います。Storyboardはプロトタイプの作成にも向いていて、画面のレイアウトと簡単な動きを見せるだけであればほとんどコードを書かずに作れてしまうので、開発者でなくても作成できると思います。先日のWWDCのキーノートでiOS7が発表され、当日のうちに開発者向けβ版などが提供開始されました。iOS7の登場によって変わっていく部分が多いと思うので、これからも勉強し続けていきたいと思います。アプリに関するお仕事をしています。アプリの実装に関する情報を中心にお届けします。〜iOS7についての考察とfladdictデザイン論〜」に参加してきました。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。〜ITエンジニアのお仕事とホンネ〜1月30日に新卒向けの会社説明会〜ITエンジニアのお仕事とホンネ〜を開催します。濱田孝治80EKS初心者の方向けに、EKS周辺のAWSリソースがどのように関連して動作しているのかをステップバイステップでEKSCTLが担っている役割を中心に説明しました。菊池修治45こんにちは、菊池です。VPNの冗長化について、最近何度か続けて社内で質問を受けましたのでまとめようと思います。大前諒祐26MediaLiveでの配信終了時に自動でアーカイブファイルをMediaConvertで変換する仕組みを作ってみました。武田隆志1179このエントリは、2018年、2019年に公開したAWS全サービスまとめの2020年版です。これまではいくつかに分割して公開していましたが、1エントリにまとめてほしいという要望をもらっていたため、今年は1エントリに集約してみました。クラスメソッドの関連会社であるアノテーション株式会社の研修として依頼を受け、チームと心理的安全性、それに礼節というテーマで話をしてきました。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe328件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui328インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。濱田孝治272「ふわわぁ、眠いな。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。