6

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

在正常情况下

注册视图 -> 登录视图 -> 主页视图

在 HomeView 和任何其他下一个控制器中,打开了一个名为“设置”的屏幕,其中包含“注销”按钮。在正常情况下,单击此按钮屏幕将弹出到 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];
        }
    }
}

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

4

2 回答 2

8

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

    LoginViewController* loginController = [[LoginViewController alloc] init]; //use appropriate initWith... method

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

NSMutableArray* newViewControllers = [self.navigationController.viewControllers mutableCopy];
[newViewControllers replaceObjectAtIndex:[newViewControllers indexOfObject:self] withObject:loginController];
[self.navigationController setViewControllers:newViewControllers animated:YES];
于 2013-06-21T08:30:13.640 回答
2

尝试这个

if ([self.navigationController.viewControllers containsObject:objLogin]) {
            [self.navigationController popToViewController:objLogin animated:TRUE];
        }
        else {
            [self.navigationController pushViewController:objLogin animated:TRUE];
        }
于 2013-06-21T07:28:39.933 回答