presentModalViewController和initWithRootViewController

时间:2012-07-15 14:23:06

标签: ios uiviewcontroller

我有一个名为 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将推送或呈现另一个视图控制器,因此堆栈应该是:

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

B,E是 UserInfoViewController 的类。

问题是,当在视图控制器E上时,我想关闭所有的viewcontrollers并返回 Root VC ,但我无法立即处理它们。

我尝试了 popToRootViewControllerAnimated dismissModalViewControllerAnimated setViewControllers ,但没有一个正常工作。

我还在 B E 中放置了一个通知监听器,当需要返回Root VC时,只需发布​​该通知,并在监听器选择器中执行:

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

然后 C D 关闭,但** B E **仍在那里。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我明白了。

只是不要考虑使用流行音乐或将其解散,让它进入导航控制器的行动。

因此,当您要从屏幕中删除所有视图控制器时,请在app delegate:

    self.window.rootViewController = nil;

当你需要再次展示时:

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

那就是它。