UINavigationController popToViewController问题

Jig*_*adu 6 uinavigationcontroller ios

我正在使用UINavigationController来处理控制器导航

在正常情况下

RegistrationView - > LoginView - > HomeView

从HomeView和任何其他下一个控制器,有一个名为Setting的屏幕打开,它有一个Logout Button.点击此按钮屏幕将在正常情况下弹出到LoginView.

- (IBAction)btnLogoutSelected:(id)sender
{
    NSArray *navArr=self.navigationController.viewControllers;
    for (UIViewController *nav in navArr)
    {
        if ([nav isKindOfClass:[LoginViewController class]])
        {
            [self.navigationController popToViewController:nav animated:YES];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦用户将被注册并且如果用户登录一次,此处应用程序具有autoLogin功能.所以当时LoginView不会在导航计数中.所以在这种情况下上面的代码不起作用.所以当时我无法进入LoginView.我需要帮助来解决这个问题.提前致谢

Mic*_*uba 8

如果您没有LoginViewController导航堆栈的实例,只需创建它:

    LoginViewController* loginController = [[LoginViewController alloc] init]; //use appropriate initWith... method
Run Code Online (Sandbox Code Playgroud)

然后你可以使用viewControllersUINavigationController的属性.您可以用当前视图控制器替换loginController,或者loginController在给定索引处插入并弹出它.

NSMutableArray* newViewControllers = [self.navigationController.viewControllers mutableCopy];
[newViewControllers replaceObjectAtIndex:[newViewControllers indexOfObject:self] withObject:loginController];
[self.navigationController setViewControllers:newViewControllers animated:YES];
Run Code Online (Sandbox Code Playgroud)

  • 我正准备发布相同的答案:) +1给John:你可以通过复制`RegistrationViewController`并在其上面添加新创建的`LoginViewController`来创建自己的`viewControllers`堆栈,然后按照Michal的建议设置动画堆栈 (2认同)