viewwillappear関連の問題
-
23-09-2019 - |
質問
私のコードの例をすべて与えずに、私はこれをすばやく作りました。
これは、初めて表示されるときだけと呼ばれるviewwillappearを取得するためにあなたの一人に起こったことがありますか?
私はすべての私の見解にこの問題を抱えています。
たとえば、アプリが起動すると、メインメニューであるStartViewに到達します。 (ViewWillappearが呼び出されます)次に、ナビゲーションコントローラーを表示する1つのボタンを押します(ViewWillappearが呼び出されます)。その後、メインメニューに戻り(呼び出されません)、同じナビゲーションコントローラーを再度押して呼び出されません。
誰かが私をどこかに向けることができれば素晴らしいでしょう、私は今2日からこれを探しています...
また、さらにコードサンプルが必要な場合は、いくつかを与えることができます。
さらに読むために:
それが私が私のナビゲーションコントローラーと呼ぶ方法です:
PremierSoinsAppDelegate *AppDelegate = (PremierSoinsAppDelegate *)[[UIApplication sharedApplication] delegate];
UIView *newView = [AppDelegate.navigationController view];
[newView setFrame:CGRectMake(320.0f, 0.0f, 320.0f, 480.0f)];
[UIView beginAnimations:@"RootViewController" context:nil];
[UIView setAnimationDuration:0.3];
newView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
UIView commitAnimations];
[AppDelegate.window addSubview:newView];
[AppDelegate.window makeKeyAndVisible];
そして、それが私のメニューを戻す方法です:
PremierSoinsAppDelegate *AppDelegate = (PremierSoinsAppDelegate *)[[UIApplication sharedApplication] delegate];
UIView *newView = [AppDelegate.startViewController view];
newView setFrame:CGRectMake(-320.0f, 0.0f, 320.0f, 480.0f)];
UIView beginAnimations:@"StartViewController" context:nil];
UIView setAnimationDuration:0.3];
newView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
[UIView commitAnimations];
[AppDelegate.window addSubview:newView];
[AppDelegate.window makeKeyAndVisible];
どうもありがとう。
解決
Nav ControllerにuinavigationControllerDelegateを実装して、ViewWillappear:メッセージを伝播できます。このようなメッセージを実装できます。
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([viewController respondsToSelector:@selector(viewDidAppear:)]) {
[viewController viewDidAppear:animated];
}
}
これはviewdivearであり、viewwillappearバージョンではないことに注意してください。しかし、それらは基本的に同じです。
ただし、これを行う必要があるという事実は、コントローラー/ビューコードで何か他のものが間違っていることを示す兆候である可能性があり、それに答えるためのより多くのコンテキストを与えてくれる質問を再現したいかもしれないことに注意する必要があります。特に、あなたが私たちに与えているコードの外側のどこかで、あなたはナビゲーションコントローラーのために通常どおりにビューコントローラーを押してポップしていると仮定しています。
他のヒント
viewwill/didappear:uinavigationcontrollerまたはuitabbarcontroller(または実際にはシステムが提供するviewcontrolller Class)を使用してビューを操作する場合にのみ呼び出されます。これを手動で行っている場合(2番目のコードスニペットで行うように、これらのメッセージは送信されません。