2009年01月28日

Table View から他の画面への遷移

 今回は、前回説明したような、Table View でセルをタップして、別の画面を出す実際のコードについて。

 Table View の中で、あるセルがタップされた時、次のメソッドが呼ばれます。

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

 引数は呼び出された View と、その位置を示します。Table View の基本で見たとおり、indexPath.section でセクション番号、indexPath.row で行番号を取得できます。

 このメソッドの実装で、indexPath をもとに新しい画面を開きます。

 新しい画面を開くということは、新しい UIView と、それをコントロールする新しい UIViewController (あるいは、そのサブクラス)のインスタンスが必要になるということです。
 UIViewController のインスタンスは、IBOutlet で保存しておく方法と、コードで直接インスタンスを作る方法があります。
 IBOutlet を使う時は、ヘッダファイルに以下のようにアウトレットを追加します。

IBOutlet UIViewController *controller;

 サブクラスを用いる場合は、UIViewController をそのサブクラス名に直します。

 Interface Builder のほうでも、現在の xib ファイルに UIViewController を追加し、アウトレットを接続します。

 サブクラスを用いる場合は、インスペクタで Attributes の Nib Name と Class Identity を手動で変えます。

TableView22
TableView23

 コードで生成する場合も、同様にクラス名と xib ファイル名を指定して初期化することになります。
CityViewController *controller;
controller = [[[CityViewController alloc]
initWithNibName:@"CityViewController"
bundle:nil] autorelease];

 いずれかの方法でインスタンスを生成できたら、実際に表示を行います。
[self.navigationController
pushViewController: controller
animated: YES];

 現在の Table View Controller ではなく、その上の Navigation Controller に対してメソッドを実行しているのに注意してください。Navigation Controller は現在の View の次の階層として、新しい View を表示することになります。
 これで、前回の次の画面がスライドして表示されます。

TableView18

 左上の、元の View に戻るためのボタンは自動で生成されます。

 ここで、先ほどの pushViewController: animated: の代わりに、次のメソッドを使ったとします。
[self presentModalViewController: controller animated: YES];

 こうすると、新しい画面は下からスライドして出てきます。前回で説明したダイアログ表示に用います。
 このメソッドは UIViewController 自体に対して実行するもので、Navigation Controller は関与しません。従って、元の画面に戻るためのボタンは自分でどこかに追加する必要があります。

 元の画面に戻る時は、以下のメソッドを使います。
[self dismissModalViewControllerAnimated: YES];


posted by PLT at 23:42| Comment(1) | TrackBack(0) | iOS SDK
この記事へのコメント
わかりやすく、お陰さまでひとつ解決しました。
ありがとう
Posted by aokn at 2010年10月01日 16:58
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/26035974
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック