0

我在UINavigationController...上遇到问题

我有这个层次结构

UINavigationController
 |- root controller
 |- ViewController A

我有一个按钮可以ViewController A做某事并按下ViewController B,但我想ViewController A在添加之前删除ViewController B

所以层次结构在这个过程之后是这样的

UINavigationController
 |- root controller
 |- ViewController B

它应该从ViewController Ato滑动ViewController B,但如果你按回,它会返回到root Controller

先感谢您。

4

4 回答 4

3

您应该使用 UINavigationController 的 setViewControllers 方法,只需将 root 和 viewController B 作为数组添加

//get the existing navigationController view stack
NSMutableArray* newViewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];

//drop the last viewController and replace it with the new one!
ViewControllerB *childController = [[ViewControllerB alloc] initWithNibName:@"ViewControllerB" bundle:nil];
[newViewControllers replaceObjectAtIndex:newViewControllers.count-1 withObject:self];

//set the new view Controllers in the navigationController Stack
[self.navigationController setViewControllers:newViewControllers animated:YES];
于 2012-10-17T11:23:06.160 回答
0

可能这可能会帮助你。

iphone NavigationController 清除视图堆栈

这是解决问题的一种不同的方法。如果您有可用的所需视图控制器的实例,您可以随时弹出它。

于 2012-10-17T11:19:42.187 回答
0

看一下[UINavigationController setViewControllers:animated:]

[self.navigationController setViewControllers:@[rootViewController, viewControllerB] animated:YES];

这应该会产生一个推送动画。

但说实话:如果你有这样的 UI,你最喜欢一开始就不想使用 NavigationController,因为这会让用户感到困惑。UINavigationController 实现的比喻非常简单。你真的不想惹这个。您可能想查看 Apple 人机界面指南,然后选择另一种展示您的观点的选项!

于 2012-10-17T11:25:06.740 回答
-2

最好的方法是使用新的 ViewController 启动 navigationController,而不是同时删除和推送。

从 ViewController A 推送时,

[self.navigationController initWithRootViewController:ViewControllerB];
于 2012-10-17T11:14:08.250 回答