Mik*_*ale 26 iphone uinavigationcontroller
我UINavigationController有一系列的UIViewControllers关于它.在某些情况下,我想要回弹两个级别.我以为我可以popViewControllerAnimated连续两次调用它,但事实证明,第二次调用它时,它不会弹出任何东西而是返回NULL.我是否需要存储对目标VC的引用并调用popToViewControllerAnimated?我可以这样做,但它使我的代码变得复杂,因为UIViewController当我将VC推入堆栈时我必须传递*.
这是相关的片段:
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.
}
Run Code Online (Sandbox Code Playgroud)
我在做一些奇怪的事吗?我想写一些惯用的代码,所以如果"正确"的方式是打电话popToViewControllerAnimated,或者完全不同的话,我会乐意改变它.
Ben*_*ris 68
在这种情况下,您需要回弹到navigationController中的特定viewcontroller,如下所示:
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:2] animated:YES];
Run Code Online (Sandbox Code Playgroud)
该代码将弹出到navigationController堆栈上的第三个viewcontroller.
Fla*_*ron 19
我认为最好计算堆栈中的视图控制器数量,然后减去要弹出的视图控制器的数量.
NSInteger noOfViewControllers = [self.navigationController.viewControllers count];
[self.navigationController
popToViewController:[self.navigationController.viewControllers
objectAtIndex:(noOfViewControllers-2)] animated:YES];
Run Code Online (Sandbox Code Playgroud)
使用此解决方案,如果稍后向项目添加新视图,则不会弄乱pop.