2012-11-09 134 views
2

我有3个viewControllers,从第一个我去第二个,从第二个到第三个。我可以更改UINavigationController viewControllers堆栈吗?

我想从第三个视图控制器回到第一个。

一个解决方案,我发现是创建一个自定义按钮,然后装回按钮,这样我完成我自己的选择,并回到firstVC。但我创建的按钮看起来不像后退按钮。

所以一个解决方案,我想的是:

一旦我进入第三视图控制器,改变在navigationController的viewControllers阵列移除所述第二视图控制器。这样它将返回到第一个而不更改后退按钮。

这可能吗?我可以随意更改UINavigationController堆栈吗?

在此先感谢

回答

1

我不知道你在做什么的细节,但是当用户希望返回一次后退按钮时,你想避免返回两次。我认为一个好的解决办法是对这个观点采取一些其他行动。

所以我从你说,如果用户进入这一观点,他们需要回到起点,不能回到第二视图控制器承担。在第三个VC中,我会完全隐藏后退按钮或导航栏,然后在视图上有另一个按钮,显然会执行一些操作,然后您只需popToRootViewController即可。

+0

第二个VC是进行搜索的VC,第三个是显示搜索结果。因此,当用户完成结果时,我希望他回到主页而不是搜索字段。我也会有一个像“重做搜索”的按钮,但我认为后退按钮应该把他带回家。思考? – pedros

+0

搜索可能是弹出的模式视图控制器,当您选择时,它会在将结果视图控制器压入堆栈时解除。这听起来像是更符合你的用户流程,你不需要做这个破解工作。 – rooster117

+0

我最终按照你的建议去做,使用模式进行搜索并在堆栈中添加结果。非常感谢。 – pedros

1

你可以尝试从堆栈中删除第二个视图控制器,并检查它。不应该是一个问题。

NSMutableArray *array = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers]; 
[array removeObjectAtIndex:1]; 

self.navigationController.viewControllers = array; 

或者只是使用

[self.navigationController setViewControllers:array animated:NO]; 

但这不是推荐的方法,因为用户可能会感到困惑。所以当你这样做时要小心。

+1

我会在我的项目中试试这个。 – pedros

3

你可以,有一个特殊的方法 - [UINavigationController setViewControllers:animated:]

相关问题