我知道我可能会因为没有正确阅读HIG或某些文档而受到谴责,但在浏览了几个培训视频并在iPhone上构建了一些小项目之后,我现在正试图把它们放在一起在iPad上,好吧,我的大脑受伤了。
我理解iPhone的想法是一个视图=一个屏幕,一个视图=一个视图控制器。但是现在我正在处理一个可以同时显示多个内容的硬件,我真的不明白我应该如何使用它。
我将给出的示例是我正在进行的当前项目...我已经为不同的内容屏幕(闪屏,菜单,文章视图等)组合了一堆不同的视图控制器。但是后来有些屏幕共享内容。例如,菜单和文章屏幕都有一个菜单栏(如工具栏),它从屏幕顶部向下滑动并提供导航。此外,我有一个导航元素,应该从屏幕的底部向上滑动,以导航到不同的文章。这些是我在许多其他iPad应用程序中看到的东西(Wired就是一个例子)。
但是我不应该一次在屏幕上放置多个视图控制器,是吗?不仅如此,如果我这样做,那么autorotate功能开始有点精神。但是,如果我将所有内容放入一个屏幕的一个视图控制器中,我最终会得到1,000行代码,其中大部分都需要复制粘贴到其他视图控制器中。对我来说似乎是一个非常难看的解决方案。
所以我显然做错了什么......但我该怎么办呢?即使有人可以指出我应该阅读的信息的方向,我将非常感激。
谢谢!
: - 乔
答案 0 :(得分:2)
您不会被禁止一次显示多个视图,其中视图控制器只是位于内存中的视图管理器。
您可以创建自定义视图控制器来管理视图控制器。可以把它想象成UINavigationController或UISplitViewController。
你有一个viewControllers的NSMutableArray
@property (nonatomic, retain) NSMutableArray *viewController;
/*
Do not use this code in production, its just for the example
*/
- (void)presentViewController:(UIViewController *)controller inRect:(CGRect)rect {
// check if viewcontroller is valid object
if (controller == nil) {
return;
}
// retain the controller
[self.viewController addObject:controller];
// position controllers view in the desired rect
// (in your implementation you might create a zones and use them instead)
controller.view.frame = rect;
// you might want to provide some animation capabilities here
[self.view addSubview:controller.view];
}
现在,您可以根据需要在屏幕上拥有自己的视图控制器。您可能有嵌套的视图控制器,例如: ViewControllerManager-> NavigationController-> [ViewControllers];
P.S。完整的实现当然会更复杂,您需要调用viewcontrollers viewWill / viewDid,管理viewcontroller视图动画(显示和解除),lowMemoryWarning上的内存管理(清除不可见或未使用的视图控制器)等等。
希望有所帮助。 :)
答案 1 :(得分:1)
我认为你缺少的是你可能会混淆不是UIViewControllers。 UIKit希望您一次只显示一个UIViewController(Apple的容器视图控制器除外),这是非常正确的。然而,单个视图控制器可以管理许多视图的层次结构,每个视图可能具有管理其某些行为的控制器对象。然后,您可以跨多个视图控制器重用这些控制器或自定义视图。