调用popViewControllerAnimated两次(Calling popViewContr

2019-07-30 03:38发布

我有一个UINavigationController一系列的UIViewControllers就可以了。 在某些情况下,我想弹回正好两个层次。 我以为我可以通过调用做到这一点popViewControllerAnimated连续两次,但事实证明,我第二次调用它,它没有任何弹出,而是返回NULL。 我需要一个参考存储到我的目的地VC和呼叫popToViewControllerAnimated呢? 我能做到这一点,但因为我不得不通过我的代码复杂UIViewController *四周,我推着风险投资商到堆栈中。

下面是相关的代码片段:

UIViewController* one = [self.navigationController popViewControllerAnimated:YES];
if (...) {
    // pop twice if we were doing XYZ
    UIViewController *two = [self.navigationController popViewControllerAnimated:YES];
    // stored in "one" and "two" for debugging, "two" is always 0 here.
}

我做一些奇怪吗? 我想写地道的代码,所以如果“正确”的方法是调用popToViewControllerAnimated ,或别的东西完全,我会高兴地改变它。

Answer 1:

在这种情况下,你需要弹出回在navigationController像这样一个特定的ViewController:

[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:2] animated:YES];

该代码会流行到navigationController的堆栈上的第三视图 - 控制。



Answer 2:

我认为它能够更好地计算视图控制器的数量,你一叠,然后减去你想弹出视图控制器的数量。

 NSInteger noOfViewControllers = [self.navigationController.viewControllers count];
 [self.navigationController 
 popToViewController:[self.navigationController.viewControllers 
 objectAtIndex:(noOfViewControllers-2)] animated:YES];

有了这个解决方案你不会弄乱弹出,如果你添加一个新的视图到您的项目以后。



Answer 3:

如果保存参考它为我UINavigationViewController并使用保存的实例:

UINavigationViewController* savedUinvc = self.navigationController;
UIViewController* one = [savedUinvc  popViewControllerAnimated:YES];
if (...) {
    // pop twice if we were doing XYZ
    UIViewController *two = [savedUinvc  popViewControllerAnimated:YES];
    // stored in "one" and "two" for debugging, "two" is always 0 here.
}


Answer 4:

此外,至于是什么你做错了,我相信之所以[self.navigationController popViewControllerAnimated:YES]不工作,第二次是因为你很可能使正被第一次调用弹出屏幕上的第二个呼叫。 第一个电话后,当前画面从导航控制器删除,因此你的时间做第二个电话, self.navigationController将返回nil,因为它不再具有导航控制器。



文章来源: Calling popViewControllerAnimated twice