libro
www.tuyano.com
初心者のためのiphone/ipadプログラミング入門

ListViewとナビゲーション (5/5)

作成:2011-04-04 09:13
更新:2011-04-04 09:23

■タッチして次のビューに移動する

では、最後に「タッチしたら、新たに作ったビューに移動する」という処理を用意しましょう。これは、RootViewControllerクラスに用意します。ここに用意される「 tableView: didSelectRowAtIndexPath: 」というメソッドが、そのためのものです。

このメソッドは、指定された項目が選択されたときに呼び出されるメソッドです。引数には、イベントが発生したUITableViewと、選択された項目を示すNSIndexPathが渡されます。このNSIndexPathから選択された項目を調べ、そして新たに表示するビューを作成して画面に表示させればいいわけですね。

下のリスト欄に、メソッドのサンプルコードを掲載しておきます。リストから項目をタッチすると、新しく作ったビューに表示が移り、「you select No,番号.」と表示されます。

ここでは、新たにOtherViewControllerインスタンスを作成し、これを表示するビューとして組み込み、ラベルのテキストを変更する、といった作業をしています。ざっと整理しておきましょう。
OtherViewController *newview = 
        [[[OtherViewController alloc] initWithNibName:
        @"OtherViewController" bundle:nil] autorelease];
まず、OtherViewControllerインスタンスを作成します。これも、nibファイルを使って生成するので、initWithNibName:というメソッドで初期化をします。
[[self navigationController] pushViewController:
        newview animated:YES];
続いて、self(自身、つまりRootViewControllerインスタンス)のnavigationControllerプロパティのpushViewController:animated:というメソッドを呼び出しています。navigationControllerというプロパティは、UINavigationControllerインスタンスが保管されるプロパティです。これはデリゲートクラスであるMyNavAppDelegateクラスの中に用意されています。このUINavigationControllerというのは、ナビゲーションの管理をしている部分のコントローラークラスです。

Navigation-based Applicationでは、ナビゲーションバーというものがあって、そこで表示するナビゲーションアイテムを管理しています。このコントローラーがUINavigationControllerです。つまり、このUINavigationControllerに、表示の変更などの操作を指示すればナビゲーションを操作できる、というわけです。

ここで行っているpushViewController:animated:メソッドは、引数に指定したビューをプッシュするものです。UINavigationControllerは、表示するビューを「スタック」して保管しています。スタックというのは、どんどん上に積み上げていき、また上にあるものからどんどん取り出していく、いわゆる「Last In First Out(後入れ先出し、最後にいれたものから取り出していく方式)」の保管庫です。

pushViewController:により、指定のビューがスタックの一番最後に追加され、画面に表示されます。そして、戻るボタンを押すと、表示している一番上のビューを取り出し、その下にあるビューが表示されるわけですね。この仕組みにより、新しい表示に移動し、また戻っていく、といったナビゲーションが行えるようになっているわけです。
NSString *msg = [NSString stringWithFormat:
        @"you select No,%i cell.",indexPath.row];
[[newview msg] setText:msg];
ページのプッシュを行ったら、表示するビューにテキストを設定しましょう。先に作成したOtherViewControllerには、UILabelに関連付けたmsgというプロパティを用意しておきました。このプロパティ(UILabel)のsetText:を呼び出して、表示するテキストを変更しておきます。

ここでは、単純に新しいビューのインスタンスを作ってUINavigationControllerにプッシュする、というようにしていますが、あらかじめいくつかの表示用ビューを配列などに用意しておき、渡されたNSIndexPathに応じて必要なものをプッシュする、というようにしておくのもよいでしょう。

リストとナビゲーションは、このように非常に密接に結びついています。これらの基本がわかると、たくさんの表示を必要に応じて切り替えていくような処理が比較的簡単に作れます。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※RootViewController.mで修正するメソッド

- (void)tableView:(UITableView *)tableView 
	didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
	OtherViewController *newview = 
			[[[OtherViewController alloc] initWithNibName:
			@"OtherViewController" bundle:nil] autorelease];
	[[self navigationController] pushViewController:
			newview animated:YES];
	NSString *msg = [NSString stringWithFormat:
			@"you select No,%i cell.",indexPath.row];
	[[newview msg] setText:msg];
}

※関連コンテンツ

「初心者のためのiphone/ipadプログラミング入門」に戻る