このページは「iPhoneプログラミング入門」(工学社刊、ISBN 978-4-7775-1541-7)を読んで、もっと先へ進んでみたいと思った人への説明です。

次へ->
<-「ビュー・コントローラ間でのデータの受け渡し、その1」
「次の一歩」一覧へ

ビュー・コントローラ間でのデータの受け渡し、その2「元のページへデータを返す」

---(1)アプリケーションの概要 ---

「メッセージ表示」->「入力」->「それを表示」

モーダルビューでメッセージを入力

モーダルビューとは、ある画面の使用中に、設定等のために出す別の画面です。ダイアログボックスのような小さいウィンドウを想像しますが、iPhoneのようなもともとが小さい画面では、特に大小にこだわらず使われます。
モーダルビューは、普通のビューコントローラを用います。違いは、ナビゲーションコントローラに「このビューコントローラをモーダルビューにするのでよろしく」と言ってやるだけです。
モーダルビューは、それを「捨てる」ことで元の画面に戻ります。ですから、「元に戻す」ためのプログラムの書き方が簡単なのです。
モーダルビューは、「最も簡単なモーダルビューの作り方」 で作って見ることができます。「それなあに?全然知らない」という場合は、これを実践して見てください。

アプリケーションの完成イメージ

モーダルビューをどのように使うか、以下が作成するアプリケーションの動作のイメージです。

ある画面に、なんらかのメッセージが表示されています。
図1 なんらかのメッセージが表示された青い画面


図2の右上にある「Edit」というボタンをクリックすると、メッセージを入力するための画面が現れます。前の画面と同じ大きさなのでピンと来ないかも知れませんが、これがモーダルビューです。適当なメッセージを入力します。
図2 メッセージを入力するためのモーダルビュー


図2の画面の入力欄に適当なメッセージを入力して「Show」ボタンをクリックすると、「元の画面」に戻ります。このとき、メッセージは図2の画面に入力した内容に切り替わっています。

図3 入力したメッセージが表示される


この動作のどこが難しいのか

「新規ページにデータをつけてやる」なら簡単

ビュー・コントローラ間のデータの受け渡しであっても、その1「新しいページへデータを送る」のほうは、かなり簡単でしたね。
これは、以下のような作業だったから簡単だったのです。

切り替え元のビュー・コントローラで、切り替え先のビュー・コントローラのオブジェクトを新しく作成する

新しく作成して、そのプロパティに値を指定して、それを「一番上の画面」として押し上げてやったのです。「自分で作ったんだから、どう設定しても自由」というわけです。

新規ページ側が、自分の作成元にデータを送るのだ

ところが、今回は、こうです。

他のビュー・コントローラ上で新しく作成されたものが、自分を作成した相手にデータを送る

新しく作成された画面上で操作中も、その作成元は見えないだけで、ちゃんと「います」。
作成された側が、自分の創造主のプロパティを「設定する」など、なんとなく「恐れ多い」という感じがするでしょう。

「メッセージを送るというメソッド」

そこで、作成された側は、自分の創造主に「メッセージ」だけを送ります。

「私の入力欄に入力された値を送りますから、これ、どうにでも使ってください」

「メッセージを送る」というのは動作ですから、「メッセージを送るというメソッドを実行する」ことになります。

値を受け取って、それを閉じる

上記のメッセージを受け取った創造主は、まず送られた値を受け取って、自分のプロパティの値とするなどして確保し、それから、作成した画面を閉じます。すなわち、モーダルビュー・コントローラを消去します。

こういうときには「デリゲート」

「アプリがナニナニしたとき」のメソッドを思い出してみよう

iPhoneアプリのプログラミングで特徴的な手法のひとつは、我々は「アプリケーション」というオブジェクトには手を触れず、「アプリケーションの必要な情報や機能を委託されたオブジェクト」である「アプリケーション・デリゲート」を使ってプログラミングをするというところでした。これは本書第7章や、第18章にもっと詳しく、述べた内容です。
「アプリケーション・デリゲート」を使うと何がいいのか?本書ではアプリケーションが簡単だったので、あまり実感できなかったと思いますが、きわめて簡単かつ、目に見える形では以下のことです。

「アプリケーションがナニナニしたとき」というメソッドが書ける

そして、「アプリケーション・デリゲート」のクラスの実装ファイルには、すでに自動で、「application:didFinishLaunchingWithOptions」のような名前のメソッドがいくつか書かれていました。

「モーダルビューが閉じたとき」というメソッドを書く

今回書くアプリケーションでは、これと同じ考えを用います。すなわち、「モーダルビューが閉じたとき」というメソッドを、自分で作って用います。「モーダルビュー」は総称ですから、「マイモーダルビュー」のような名前を仮につけておきましょう。たとえば以下のような名前にします。

mymodalviewcontroller:didClose

そのために、「マイモーダルビュー・デリゲート」のようなものを自分で作って使います・・・という話になります。
これ以上は実際にアプリを作りながらのほうがわかりやすいでしょう。ここでは、「アプリケーション・デリゲート」に似たような「マイモーダルビュー・デリゲート」を作れば、「マイモーダルビューが閉じたとき」というメソッドが書ける、というアイディアをなんとなく思い浮かべていただければと思います。
このような方針でアプリケーションを作るのですが、「デリゲート」を作ってみる前に、これまでの知識で準備することがあります。まず、それらをやっておきましょう。
次のページで簡単に解説します。内容は全て、「次の一歩」の記事でこれまでに行って来たことです。随時、参照する記事を示しますので、「それはやったことがない」と思った方は、まずそちらの記事から実践してみてください。

準備しておくこと

「次の一歩」一覧に戻る