在iPad端口中管理视图控制器

在iPad端口中管理视图控制器,ipad,uiviewcontroller,uitableview,Ipad,Uiviewcontroller,Uitableview,我有一个为iPhone开发的应用程序,但现在想移植到iPad上。iPhone应用程序是导航式的,基于由导航控制器管理的离散表视图控制器。iPad更大的屏幕空间意味着我可以舒适地同时在屏幕上安装两个表视图控制器 问题是怎么做?我应该吗 a) 让主视图从单独的NIB加载两个表视图控制器,然后将它们放置在屏幕上(我不确定如何设置从NIB加载的子视图的x和y) b) 在我的主nib中创建子视图,并用现有类中的数据填充这些子视图(如果是这样,我如何连接IBOutlet) c) 做一些完全不同的事情 我要指

我有一个为iPhone开发的应用程序,但现在想移植到iPad上。iPhone应用程序是导航式的,基于由导航控制器管理的离散表视图控制器。iPad更大的屏幕空间意味着我可以舒适地同时在屏幕上安装两个表视图控制器

问题是怎么做?我应该吗

a) 让主视图从单独的NIB加载两个表视图控制器,然后将它们放置在屏幕上(我不确定如何设置从NIB加载的子视图的x和y)

b) 在我的主nib中创建子视图,并用现有类中的数据填充这些子视图(如果是这样,我如何连接IBOutlet)

c) 做一些完全不同的事情


我要指出的一点是,我不想使用拆分屏幕选项。

警报!此QA现在仅具有历史价值。

现在,在iOS中使用容器视图进行此类操作非常简单,这就是苹果编辑这些视图的原因:


历史答案

“。如何设置从NIB加载的子视图的x和y?”

菲尔,我不确定我是否完全理解你的问题,但这里有一个简单明了的方法:

启动interface builder,在新的大iPad视图中,只需添加新的小视图(UIView)。。。把它们放在你想要的地方和方式。我们将这些称为“篮子”视图

假设另一个应用程序中的一个复杂视图是fatDogs视图。将新的篮子视图称为fatDogsBasket。然后在代码中,在viewDidLoad中,对所有这些“篮子”执行以下操作

你完了!(显然,请确保相关的视图控制器、胖狗、闪光灯等都已准备就绪并已实例化。)

“篮子”系统很方便,因为每一个篮子将把你以前的工作放在一个地方;有用的是,你可以(说)通过触摸篮子来设置整体隐形效果或其他效果。显然,如果你想设置,或者可能移动,一个篮子在代码中的位置,就去吧

happyBasket.frame = CGRectMake(509,413,
    happyBasket.frame.size.width,
    happyBasket.frame.size.height);
iOS中的UIView非常轻量级,因此添加另一层UIView完全没有问题

我希望这就是你的意思

------后来


你接着问:“只是为了确保我清楚如何实现它。主视图控制器为每个‘篮子’都有IBOutlet,并且它的这个IBOutlet连接到我正在调用的子视图。我将在每个篮子中显示的每个视图控制器都有它自己的nib和关联的IBOutlet。对吗?–”

所以,“主视图控制器为每个“篮子”都有IBOutlet…”

右,新应用程序中的主视图,在.h文件中有如下行:

IBOutlet  UIView  *fatDogsBasket;
请注意,您只是将“fastDogsBasket”声明为UIView。你不应该太担心“IBOutlet”这个词。所有这一切都意味着“我需要能够在界面控制器中查找此项。”重要的是要意识到它没有任何作用

因此,是的,所有的“篮子”都将是UIView,因此,您当然必须在主视图控制器的.h文件中这样定义它们。就个人而言,他不会使用“视图控制器有IBOutlets”这一短语。这有点混淆了事情,给出了错误的想法。只需说“别忘了在头文件中将UIView标记为iboutlets。”

总之,是的,这正是您要做的,在主控制器的.h文件中声明所有“basket”UIView,并将它们全部标记为IBOutlets,以便interface builder可以更轻松地工作。接下来

“这是我调用的子视图的IBOutlet连接”——这是错误的

像fatDogsBasket这样的篮子只是一个UIVIEW,仅此而已。这只是一个风景

现在,如您所知,您可以将UIView放在其他UIView中。(显然,这是很常见的,每个UIView中都有许多UIView,等等——这是构建界面最基本的部分。)

那么,你打算在你的肥狗包里放什么?你要把以前所有的工作都放在肥狗身上!之前(在iFone中)您编写了一个很棒的类-视图控制器-名为fatDogs。(它甚至可能有许多子类等等。)

我们现在将从fatDogs(当然,也就是fatDogs.view)那里获取视图,并将其放入fatDogsBasket中。(回想一下,fatDogsBasket是一个UIView。)

因此,首先,你必须在你的新项目中完全包括你那令人惊叹的班级胖子(来自旧项目)。点击“添加现有的苍蝇/类”或类似的东西……你会找到答案的。是的,添加所有类文件、XIB、任何子类等等

那么,就这么做吧。。在新的超级强大的uber控制器中,在viewDidLoad中,只需对所有“篮子”执行以下操作即可

你完了!请注意,fatDogs的视图(即fatDogs.view)现在显示在UIView fatDogsBasket的内部。班上的肥狗现在将完全正常工作,就像过去一样!难以置信的是,你可以很容易地(在你的新控制器中)做一些事情,比如简单地移动fatDogsBasket,它可以一次轻松地移动fatDogs视图,而不用担心fatDogs及其视图的细节

最后你问

“我将在每个篮子中显示的每个视图控制器都有自己的nib和关联的IBOutlet。”

完全正确。当您将旧系统“fatDogs”添加到新项目时,您将添加它的所有xib文件等等。在这些类中发生或不发生的任何事情,比如按钮或其他标记为iboutlets的东西,或者其他任何东西,在这些类中仍然是一样的。我敢肯定,在新项目中使用这些旧类时,绝对不会有任何改变

只是记录在案。。“我将在每个篮框中显示的每个视图控制器…”
IBOutlet  UIView  *fatDogsBasket;
[fatDogsBasket addSubview:fatDogs.view];
[clientsBasket addSubview:clients.view];
[namesBasket addSubview:names.view];
[flashingLightsBasket addSubview:flashingLights.view];
// etc
xxx = [[HappyThing alloc] init];
[xxxBasket addSubview:xxx.view];
[xxx beginProcessing];
[xxx showAmazingRedFlashingLights]; // or whatever