Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UINavigationController popToViewController问题_Ios_Uinavigationcontroller - Fatal编程技术网

Ios UINavigationController popToViewController问题

Ios UINavigationController popToViewController问题,ios,uinavigationcontroller,Ios,Uinavigationcontroller,我正在使用UINavigationController处理导航控制器 在正常情况下 注册视图-> 登录视图-> HomeView 在HomeView和任何其他下一个控制器中,会打开一个名为“设置”的屏幕,该屏幕上有“注销”按钮。在正常情况下,点击此按钮屏幕将弹出到LoginView - (IBAction)btnLogoutSelected:(id)sender { NSArray *navArr=self.navigationController.viewControllers;

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

在正常情况下

注册视图-> 登录视图-> HomeView

在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将不在导航计数中。所以在这个场景中,上面的代码不起作用。因此,当时我无法进入LoginView。我需要帮助来解决这个问题。提前感谢

试试这个

if ([self.navigationController.viewControllers containsObject:objLogin]) {
            [self.navigationController popToViewController:objLogin animated:TRUE];
        }
        else {
            [self.navigationController pushViewController:objLogin animated:TRUE];
        }

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

    LoginViewController* loginController = [[LoginViewController alloc] init]; //use appropriate initWith... method
然后您可以使用UINavigationController的
viewControllers
属性。您可以将当前视图控制器替换为
loginController
,或在给定索引处插入
loginController
,然后弹出到它

NSMutableArray* newViewControllers = [self.navigationController.viewControllers mutableCopy];
[newViewControllers replaceObjectAtIndex:[newViewControllers indexOfObject:self] withObject:loginController];
[self.navigationController setViewControllers:newViewControllers animated:YES];

您是对的,这可以很好地工作,但是在自动登录场景中,LoginView不会添加到导航中,因此它不在navigationController计数中。您完全正确,当时我对导航不太了解。我正要发布相同的答案:)+1给约翰:你可以通过复制
RegistrationViewController
并在上面添加新创建的
LoginViewController
来创建自己的
viewcontroller
堆栈,然后按照Michal@michal-ciuba谢谢,它工作正常&我了解它背后的概念。