2

UINavigationControllerクラス間を移動するためにを使用しています。最初のビューのボタンを押して2番目のビューに移動すると、すべてが正常に機能します。しかし、2番目のビューから最初のビューに戻りたくない場合は、viewDidLoadメソッドが呼び出されていないので、それを実行する必要があります。

この投稿によると、私はどういうわけか私の見解を設定する必要nilがありますが、それをどこで、どのように行うのかわかりません。これは、最初のビューに戻るために使用しているコードです。

NewSongController *nsContr = [[NewSongController alloc] initWithNibName:@"mNSController" bundle:nil];
[self.navigationController popViewControllerAnimated:YES];
[nsContr release];
4

3 に答える 3

5

コードが正しくありません。

ポップするために最初のコントローラーをインスタンス化する必要はありません。すでに存在しています。

viewDidLoadは、viewControllerを初めてロードしたとき(つまり、プッシュしたとき)にのみ実行されます。他のコントローラーにプッシュすると、それらはスタックに置かれます(カードのスタックを想像してください)。別のカードをスタックにプッシュすると、その下のカードはすでにそこにあります。

あなたがポップするとき、それはスタックからカードを取り除くようなものです。ただし、下のカードはすでに存在するため、再度ロードする必要はありません。viewWillAppearを実行するだけです。

ポップバックするためにあなたがする必要があるのは...

[self.navigationController popViewControllerAnimated:YES];

それでおしまい。

NewSongControllerに関するものを削除します(それがあなたが戻ろうとしているものである場合)。

次に、NewSongController関数- (void)viewWillAppear:animated;に、戻ったときに実行するコードを配置します。

お役に立てば幸いです。

于 2012-09-20T16:56:07.103 に答える
1

最初のビューが読み込まれ、ナビゲーションスタックにプッシュされます。ビューをnilに設定すると動作にどのように影響するかを完全に理解せずに、スタックの内容を台無しにしないでください。

viewDidLoadで何をするにしても、viewWillAppearまたはviewDidAppearで行うと、希望する結果が得られます。

于 2012-09-20T16:51:03.410 に答える
0

viewDidLoadは、ナビゲーションスタックに既に存在するため、表示されません。スタックに戻るので、1つのビューコントローラーからその下のビューコントローラーにポップするときに実行されるviewWillAppearまたはviewDidAppearでトリガーするコードが必要になります。

于 2012-09-20T16:51:55.063 に答える