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