在部分显示的UIView中导航

时间:2013-08-09 14:21:46

标签: ios cocoa-touch uinavigationcontroller

(这是对我上一个问题的跟进:How to accomplish a "90% slide" between two UIViews

当前状态:

作为背景,我有一个容器视图控制器,通过滑动它们来管理两个独立的UIView(以及它们各自的UIViewControllers)" in&out"必要时:

enter image description here

感谢@rdelmar的指导,我现在有了这个工作。

问题:

这是我的下一个问题:我希望次要视图(上面的黄色)是"可导航" - 也就是说,我希望有一个可选项的UITableView,当被触摸时,在该较低的框架中显示不同的UIView:

enter image description here

我的想法:

我曾考虑在下层框架中嵌入一个UINavigationView控制器来处理这种导航,但我(通过几个来源,例如iPhone UINavigationController inside UIViewController)学到了一个不能嵌入" UINavigationController在现有UIView中的功能 - 它旨在接管整个屏幕。

所以,如果一个UINavigationController已经出局(并且你可以告诉我它是否真的如此,或者我的上述结论是不正确的),听起来我还是要手动创建一个层次结构,排序和管理那些UIViews如何进入和离开下方框架。这不是世界上最糟糕的事情,但当我想到UINavigationController免费提供这个时,它会刺痛。

与往常一样,您的想法非常受欢迎。谢谢!

2 个答案:

答案 0 :(得分:2)

UINavigationController肯定不会出局:)

你说

  

我有一个容器视图控制器,它管理两个独立的UIViews(以及它们各自的UIViewControllers)

在这里使用导航控制器只是一个很小的改变。

不是添加较低的UIViewController,而是添加UINavigationController UIViewController作为其根视图控制器。

即。而不是

// If 'small' is the name of your smaller view controller
[self addChildViewController:small];
[self.view addSubview:small.view];

DO

UINavigationController *n = [UINavigationController alloc] initWithRootViewController:small];
n.view.frame = small.frame;
[self addChildViewController:n];

[self.view addSubview:n.view];

现在,您可以在应用的底部部分上/下推出新的视图控制器。

我现在已经在几个应用程序(iOS 5及更高版本)中完成了此操作,并且没有遇到任何问题。

PS上面的代码是从内存中输入的,因此某些方法名称可能不是完全正确!

答案 1 :(得分:0)

我建议将根视图控制器设置为UINavigationController,并简单地将齿轮视图作为UINavigationController的子项覆盖在顶部。您可以使用insertSubview:aboveSubview:来执行此操作。

这会为您简化很多事情,因为您的功能核心应该是根视图控制器。

使用UINavigationController是非常可取的,因为您可以免费获得所有动画和堆叠逻辑。