「Navigation-based Application」テンプレートで作成したアプリをpushでつなぐには、
- まず、「classes」を選択して、「追加」>「新規ファイル」>「UIViewControllersubclass」を選択。オプションは必要に応じてチェックを入れる。「次へ」。
- ファイル名を決める。「UIViewController」のサブクラスなので、ファイル名は「xxxViewController」とした方がわかりやすいと思う。
- 「classes」に1組の「xxxViewController.h」「xxxViewController.m」が追加されたら、pushする側の「.m」ファイルにpushされる側の「.h」ファイルをインポートする。
ex.「RootViewController.m」
#import "xxxViewController.h"
- 続けて、- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPathメソッドで「xxxViewController」クラスのインスタンスを生成し、そのインスタンスを「navigationController」の「pushViewController」メソッドの引数にセットする
xxxViewController *xxxViewController=[[xxxViewController alloc] initWithNibName:@"xxxViewController" bundle:nil];
[self.navigationController pushViewController:xxxViewController animated:YES];
[xxxViewController release];
これでいくつでも「viewController」を追加できる。
要するに、pushされる側の「viewController」を生成し、pushする側の「.m」ファイルにそのクラスの「.h」ファイルをインポート。「didSelectRowAtIndexPath」でpushするだけである。
多くの場合「2」のオプションでは「UITableViewController subclass」にチェックを入れると思うが、その場合、「- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView」メソッドと「- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section」メソッドを返り値を設定しないと、エラーが出てアプリは起動しない。わからなければ、とりあえず「return 1;」としておけばエラーは出ない。
「pushViewController」は「navigationController」がもつメソッドのため、「navigationController」が「AppDelegate」で生成され、「window」のサブビューに追加(addSubview:)されていないと使用できない。「Navigation-based Application」テンプレートで作成した場合には、初めから生成、接続されているため、気にする必要はない。
また、「navigationController」は一度、「window」のサブビューに追加されてしまえば、追加するビュークラスで新たに生成、接続する必要はない。
コメントする