このページは「iPhoneプログラミング入門」(工学社刊、ISBN 978-4-7775-1541-7)を読んで、もっと先へ進んでみたいと思った人への説明です。
<-前へ
-->
「次の一歩」一覧へ
自分で作るナビゲーション3
ZeroNavViewControllerを編集
ヘッダファイル
ヘッダファイルZeroViewController.hを編集して、ボタンをクリックしたときの動作を記述します。文法的にはメソッドですが、特別にこういうのを「アクション」と呼ぶのでしたね。
「Next」という文字が表示されたボタンをクリックしたら、NextViewControllerのビューへ行くようにしたいのですから、アクション名をgoNextにしましょう。
以下のように書きます。
-(IBAction)goNext:(id)sender;
アクションの書き方や意味の詳細は、本書をご覧ください。
編集したら、保存します。
実装ファイル
実装ファイルZeroViewController.mに、アクションgoNextの中身を書きます。これは「最も簡単なナビゲーションの作り方」で、RedViewControllerだけを移動対象にしたときと同じように書けばいいでしょう。要するにちゃんとナビゲーションコントローラが機能してくれることを確認できればいいのです。
リスト1のようになります。
リスト1 アクションgoNextの定義
NextViewController *nextViewController = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
[self.navigationController pushViewController:nextViewController animated:YES];
[nextViewController release];
リスト1は、「最も簡単なナビゲーションの作り方」のリスト7の定義の中身を変更しただけです。
その変更とは、「RedViewController」を「NextViewController」に変更するだけです。
そして、以下の語は「変更しない」ので気をつけてください。
self.navigationController
AppDelegateのクラスのプロパティでnavigationControllerではなくnavControllerというプロパティ名を使うようにしましたが、これはAppDelegateの中での話です。ここで出てくるnavigationControllerは、UIViewControllerクラスで定義されているプロパティ名ですから、我々が変更するものではないのです。ということは、「最も簡単なナビゲーションの作り方」で確認だけしました。今回、実際にこの問題に直面したわけです。
リスト1のように「NextViewController」というクラス名を直背鵜書いたら、このクラスをどこで参照すればいいのか書かなければいけないのでした。プログラムの冒頭に「NextViewController.h」をインポートする宣言を書いておきます。
ZeroNavViewController.xibの最後の仕上げ
ボタンとファイルオーナー間で連結
ZeroNavViewController.xibを開きます。
本書でやったとおりです。「クリックしたときの動作」だけが問題なのですから、インターフェイス・ビルダー上のボタンは無名で構いません。このボタンのコネクションパネルを開いて、「Events」一覧の中の「Touch Up Inside」とファイル・オーナーの「goNext:」を連結します。
ファイルを保存します。
ビルド・実行してみましょう。今度はボタンをクリックすると、「This is the Next Page.」と書いておいた「NextViewControllerのビュー」に移動します。
なんと、元に戻るボタンはすでに用意されています。インターフェイス・ビルダーの「ライブラリからナビゲーションコントローラを導入」したからこんなボタンがついているのでしょうか。なんで「ナビゲーションベースのテンプレート」ではついてないんだヨと恨み言のひとつも言いたくなります。
図8 「Next」ボタンのクリックにより、別のビューに移動する
「ナビゲーションベースのテンプレートより簡単じゃないか」と思いましたか?いやいや、それは一度ナビゲーションベースのテンプレートでコードやインターフェイス・ビルダー上での構造を見ているからこそ、簡単に想像できることなんですヨ。
。