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

<-前へ
「次の一歩」一覧へ

最も簡単なモーダルビューの作り方4

メソッド「showInfo」の移動と、ちょっとした編集

「FirstModalAppDelegate.h」から「FirstModalViewController.h」へ

「FirstModalAppDelegate.hに書いた、メソッドshowInfoの定義を、「FirstModalViewController.h」に移動します。前の既述はコメントアウトして、あとで戻せるようにしておきましょう。

「FirstModalAppDelegate.m」から「FirstModalViewController.m」へ

「FirstModalAppDelegate.mに書いた、メソッドshowInfoの実装を、「FirstModalViewController.m」に移動します。こちらも、前の既述はコメントアウトしておきましょう。
また、「FIrstModalViewController」のほうに、「InfoViewController.hをインポートする宣言を書いておきます。

それでも、まだ安心できません。もし、このページの通りにプログラムを書いていたら、リスト1の部分がエラーになります。
リスト1 「navController」というところでひっかかる
	[self.navController presentModalViewController:......

なぜなら、「navController」は、「FirstModalAppDelegate」クラスに、私たちが意図的に命名して加えたプロパティだからです。
今、メソッドを「FirstModalViewController」クラスの定義に引っ越しました。このクラスでは、わたしたちは「navController」というプロパティを定義していません。

「FirstModalViewController」クラスには「navigationController」というプロパティが「ある」

では、こちらのクラスにもプロパティを定義すればいいかというと、その必要はありません。
こちらは「UIViewController」というクラスを元にしています。このクラスには、もともと「navigationController」というプロパティがあります。すでに「最も簡単なナビゲーションの作り方」で利用済みです。ですから、リスト2のように直せばいいのです。
リスト2 最初から用意されているプロパティ「navigationController」を使えばよい
	[self.navigationController presentModalViewController:......


MainWindow.xibの再編集

Xcode4使用上の注意

MainWindow.xibを開きます。
Xcode4を使っている人は、「ナビゲーションコントローラ」の表示されない真っ白な画面に遭遇して驚くかもしれません。それは、真っ白な「window」の画面が選択されて、前面に出ているからです。
左側に、Xcode3でいう「ドキュメント・ウィンドウ」に相当する、縦に細長い領域がありますね。ファイルオーナー、デリゲート、ナビゲーションコントローラなどのアイコンがあります。その中で、「window」が選択されていると、その真っ白な画面が前面に現れます。
対処法は、「ナビゲーションコントローラ」のアイコンをクリックするか、マウスで前面の画面を移動させると、後ろに現れます。
図5 真っ白なだけのウィンドウをマウスでずらすと、後ろにナビゲーションコントローラなどが現れる

前の接続を消す

ナビゲーションコントローラの上にあるボタン「Info Light Button」のイベント「Touch Up Inside」を調べます。「FirstModal App Delegate」の「showInfo:」 メソッドと結びついていると思います。その接続を消去します。

ビュー上に連結線を引っ張る

今回「Touch Up Inside」と連結したい相手は、「FirstModal View Controller」の「showinfo:」メソッドです。
それには、ビュー上のどこかに連結線を引きます。ただし、このビューは前ページまでの動作がうまく行っていればOKです)
"図6では「FirstModalView」という字が書いてある(Xcode4では書いていないかと思われます)のでつい、そこを狙ってしまいましたが、別に他の場所でもView上であればOKのはずです。
「ドロップ」すると「showinfo:」という選択肢が出て来ますので、それを選択します。
図6 ビュー上のどこかに連結


図7 「showInfo:」メソッドが候補に挙がるので選択


図8 「FirstModalViewControllerのshowInfo」と結合された


一方、「FirstModalViewController.xib」のほうも編集して、好きなデザインの画面にしておきます(このアプリケーションでは、「FirstModalViewController」のビュー上の部品を何か操作することはしません)
アプリケーションを起動してみましょう。もっとも、起動画面がデザインされたものになるだけで、動作は前と変わりません。「ナビゲーションバー」の「infoボタン」をクリックすると、モーダルビューが出て来て、そこの「OK」ボタンをクリックすると引っ込みます。
図9 「FirstModalViewControllerのビューもデザインした」

「parentViewController」が変わる

目的の動作を得るということではこれで完成ですが、一部ソースコードの意味が変わっているのに注意が必要です。
「InfoViewController.m」の、リスト3の部分を見てください。「parentViewController」は、自分を呼び出したビューコントローラです。今度は、「ナビゲーションコントローラ」ではなく「FirstModalViewController」のことになりました。
リスト3 「parentViewController」の既述は変わらないが、指すものは変わった
	[self.parentViewController  dismissModalViewControllerAnimated:YES];


おつかれさまでした。「次の一歩」画面に戻ります。