弹出到以前的UINavigationController

时间:2015-06-04 08:35:42

标签: ios objective-c uinavigationcontroller

我有两个这样的UINavigationControl:

LoginNavigationController -> LoginView
HomeNavigationController -> HomeView -> ...

从LoginView我导航到HomeView,如下所示:

[self presentViewController:HomeNavigationController animated:YES completion:nil];

现在,当应用程序转到后台时,我需要转到LoginView。这样做的正确方法是什么?使用presentViewController重定向会导致任何内存问题吗?

5 个答案:

答案 0 :(得分:0)

假设您的LoginViewController是层次结构中的根视图控制器,也许您可​​以在应用代理中的popToRootViewController上调用rootViewController(在applicationWillEnterForeground或其他内容中)< / p>

答案 1 :(得分:0)

您可以使用视图控制器popToRootViewController。首先,你需要找到你想要去的前一个控制器, 在HomeNavigationController上,

for (UIViewController *controller in self.navigationController.viewControllers) {
        if([controller isKindOfClass:[LoginNavigationController  class]]){

            [self.navigationController popToViewController:controller animated:YES];
            break;
        }
    }
当应用程序转到后台然后转到前台时,

执行此代码。

答案 2 :(得分:0)

呈现可能不是你想要的,因为它呈现的是另一个视图控制器而不是已经加载的视图控制器。我会选择弹出到根视图控制器。

[self.navigationController popToRootViewControllerAnimated:YES];

答案 3 :(得分:0)

在您AppDelegate的{​​{1}}方法中,更改窗口的根视图控制器。

applicationDidEnterBackground

答案 4 :(得分:0)

请在LoginView中使用以下代码 -

- (void)viewDidLoad
{
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodEnterBGMode) name:UIApplicationDidEnterBackgroundNotification object:nil];

}

- (void)methodEnterBGMode
{
    [self dismissViewControllerAnimated:NO completion:nil];
}

希望这会对你有所帮助。