2011-01-03 10 views
0

先日、私はUINavigationController as a child of a UIViewControllerの使用について尋ねました。私はその答えによって働いている。今私がやっていることは、コントローラをnavスタックにプッシュすることです。テーブルセルにタッチすると、次のようになります。UIViewControllerをUINavigationControllerにプッシュ

- (void) showSetup { 
    NSLog(@"Showing Setup"); 
    SetupViewController *controller = [[SetupViewController alloc]initWithNibName:@"SetupViewController" bundle:nil]; 
    self.setupViewController = controller; 
    self.setupViewController.title = @"Setup"; 
    [self.navigationController pushViewController:self.setupViewController animated:YES]; 
    [controller release]; 
} 

私のコンソールにはログステートメントが表示されますが、ビューは変更されません。何か不足していますか?

+0

self.navigationControllerがnilかどうかを確認しましたか? – Jonah

+0

私はちょうどそれを行いました*それは*ではないです。ありがとう。 – Gregg

+0

setupViewControllerプロパティがある理由はありますか? –

答えて

1

ええと、あなたの実装の詳細を知らなくてもちょっと難しいですね。リンクされた記事のようにナビゲーションコントローラを実装したと仮定しました。

@interface SOViewController : UIViewController < UITableViewDelegate,UITableViewDataSource > {

 
    UINavigationController* navController; 
} 

- (IBAction) pushMe:(id)sender; 
@end 
:あなたは何の詳細を与えないが、どこかのラインに沿ってテーブルビューコントローラを追加しましたので、私はのUIViewController 1つの場所ですべてを処理するためのUITableViewプロトコルに準拠して作られたようにまたそれが聞こえます

IBのSOViewControllerのビューにボタンをドロップし、pushMe:アクションをそのビューに配線しました。また、別のUIViewControllerベースのクラスJunkControllerを作成し、IBのビューに「Junk」ラベルをドロップしました。 pushMeで

 
navController = [[[UINavigationController alloc] init] retain]; 
navController.navigationBar.barStyle = UIBarStyleBlackOpaque; 
navController.toolbarHidden = YES; 

UITableViewController* tvController = [[UITableViewController alloc] init]; 
UITableView* tv = [[UITableView alloc] init]; 
tvController.tableView = tv; 
tv.delegate = self; 
tv.dataSource = self; 
[navController setViewControllers:[NSArray arrayWithObject:tvController]]; 

:アクションの実装:SOViewControllerさんのviewDidLoadで[self presentModalViewController:navController animated:YES];

のtableViewデリゲートとデータソースメソッドの実装されました。選択のために:

 
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"row selected"); 
    JunkController* junk = [[JunkController alloc] initWithNibName:@"junkcontroller" bundle:nil]; 
    [navController pushViewController:junk animated:YES]; 
    [junk release]; 
} 

これは、「プッシュミー」ボタンが付いた画面を表示するアプリケーションを生成するはずです。そのボタンを押すと、モーダルナビゲーションベースのテーブルビューが表示されます。その中には、「select me」というラベルが含まれています。この行をタッチすると、ジャンクコントローラがアニメーション化されてビューに表示されます。

+0

「ジャンク」がbtwをリークしています。 – NSAlexC

+0

yarそれは約10分のコードジョブでした - 主な目的は、OPが望んでいたものの完全な横断を示すことでした:) – jstevenco

+0

ただこの人を助けようとする心配はありません。 + 'ed – NSAlexC

0

このView ControllerでsetupViewControllerを宣言されたプロパティにする必要はありません。また、私は誤解を招くかもしれませんが、 "コントローラ"はCocoaの予約された名前だと思っていました。ですから、UITableViewDelegateに登録し、次のようにフックして、新しいビューコントローラをプッシュする- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPathを使用していることを確認してください:

SetupViewController *detailViewController = [[SetupViewController alloc] initWithNibName:@"SetupViewController" bundle:nil]; 
detailViewController.title = @"Setup"; 
[self.navigationController pushViewController:detailViewController animated:YES]; 
[detailViewController release]; 

グッドラック!

+0

デリゲートのものが行く限り、私のポストをもう一度読んでください。私はすでにそれをやっています。私は、テーブルセルの行をクリックすると、私のメソッドからログステートメントを取得しています。私はデバッグしましたが、コードはすべてエラーなく終了します。ただナビゲートしません。 – Gregg

+0

'controller'は予約語ではありません。私は事故なくそれを使用しました。 Xcodeはそれを予約語として色付けしません。 – westsider

+0

コントローラーは予約済みの名前ではありません。 – NSAlexC

関連する問題