1

UINavigationController を使用して、一種の「左から右」の階層ナビゲーションを実現しようとしています。私はこのコードを使用しています:

-(IBAction)showSettings:(id)sender {
UINavigationController *aNavController = [[UINavigationController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:aNavController animated:YES];

SecondView *secondView = [[SecondView alloc] initWithNibName:nil bundle:nil];
[aNavController pushViewController:secondView animated:NO];

UIBarButtonItem *aButton = [[UIBarButtonItem alloc] initWithTitle:@"Knapp" style:UIBarButtonItemStylePlain target:self action:@selector(nextView:)];
aNavController.topViewController.navigationItem.rightBarButtonItem = aButton;

[aButton release];
[secondView release];
[aNavController release]; }

-(IBAction)nextView:(id)sender {
ThirdView *thirdView = [[ThirdView alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:thirdView animated:YES];
NSLog(@"Push it like it's hot"); }

「nextView」が正しく呼び出され、「Push it like it's hot」が「Output」に出力されますが、何もプッシュされず、新しいビューは表示されません。変更も試みまし [self.navigationController pushViewController:thirdView animated:YES];[self.navigationController popViewControllerAnimated:YES];が、結果は同じままで、何も起こりません。

私の結論は次のとおりです。「nextView」の self.navigationController 部分で何か間違ったことをしています。つまり、プログラムは何をプッシュ/ポップするかを認識していません。これについて何らかのドキュメントを調べるために最善を尽くしましたが、うまくいかないので、ここにいます。

self.navigationController はそれを行う正しい方法ですか、それともその行に何かが欠けていますか?

前もってありがとう、トビアス・トベダル

4

2 に答える 2

1

を使用しているときは、showSettings でself.navigationController定義されているナビゲーション コントローラにアクセスしていません。セルフ ビュー コントローラを押すことができるナビゲーションを参照します。このコードが定義されているビューには、NavigationController がないと仮定します。これはnull を指していることを意味します。次のようにして、nextView メソッドでこれを確認できます。aNavControllerself.navigationControllerself.navigationControllerNSLog(@"%@", self.navigationController);

あなたがする必要があるのは、aNavController をヘッダー ファイルのインスタンス変数にすることです。そうすれば[aNavController pushViewController:thirdView animated:YES];、nextView: メソッドで実行できます。

于 2011-08-26T14:37:09.380 に答える
0

あなたの問題と思われるのは

UINavigationController *aNavController = [[UINavigationController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:aNavController animated:YES];

新しいモデル ビュー コントローラーをスタックにプッシュし、このナビゲーション コントローラーを現在のビュー コントローラーのナビゲーション コントローラーにしません。

そのため、現在のビュー コントローラーのナビゲーション コントローラーを aNavController に設定するか、aNavController をクラス変数にして、それを使用して thirdView をプッシュする必要があります。

于 2011-08-26T14:38:44.850 に答える