1

UserInfoViewControllerという名前のUIViewControllerクラスがあります。表示されるとき、parentViewControolerは次のようなコードを使用します。

    UserInfoViewController *rvc = [[UserInfoViewController alloc] initWithNibName:@"UserInfoViewController" bundle:nil];
    rvc.user = user;
    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:rvc];
    nc.navigationBarHidden = YES;
    [self presentModalViewController:nc animated:YES];
    [rvc release];
    [nc release];

UserInfoViewControllerが別のViewControllerをプッシュまたは提示する場合があるため、スタックは次のようになります。

Root VC
     |
     A (push)
     |
     | - B (present)
           |
           |-- C (push)
                 |
                 |- D (push)
                     |
                     |- E (present)

B、EはUserInfoViewControllerのクラスです。

問題は、ビューコントローラEで、すべてのビューコントローラを閉じてルートVCに戻りたいのですが、一度に処理できないことです。

popToRootViewControllerAnimateddismissModalViewControllerAnimatedsetViewControllersを試しましたが、どれも機能しませんでした。

また、通知リスナーをBEに配置し、ルートVCを返す必要がある場合は、その通知を投稿するだけで、リスナーセレクターで次のようにします。

[self.navigationController popToRootViewControllerAnimated:NO];
[self.presentingViewController dismissModalViewControllerAnimated:NO];

その後、CD は閉じられますが、**BE**はまだそこにあります。

助言がありますか?

4

1 に答える 1

0

わかった。

pop について考えたり、却下したりしないでください。navigationController の dealloc アクションに任せてください。

そのため、画面からすべてのビュー コントローラーを削除する場合は、アプリ デリゲートで次のようにします。

    self.window.rootViewController = nil;

そして、何かをもう一度表示する必要がある場合:

navigationController = [[UINavigationController alloc] init];
navigationController.navigationBarHidden = YES;
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];

それでおしまい。

于 2012-07-16T13:10:19.207 に答える