2009-10-18 57 views
4

我正在编写基于视图的应用程序,但我对加载视图有点困惑。我想在同一个窗口中同时加载四个不同的视图。我似乎无法弄清楚如何做到这一点。如果可能的话,我宁愿以编程方式执行所有操作,而不是使用界面生成器。在一个窗口中显示多个视图

我的4个视图是:UIView,UIWebView,UITableView和另一个带按钮的UIView。

在此先感谢您的帮助。

+0

你能更详细地描述如何将这些安排?这是一个屏幕?也许张贴你想要做什么的草图? – 2009-10-18 17:30:46

+0

当然。它基本上是同时在一个屏幕上堆叠在另一个屏幕上的一个视图。每个人都占据屏幕的一部分。 不知道如何发布草图,抱歉。 – Adam 2009-10-18 17:33:06

+0

想出了如何发布图片,但我没有足够的代表点将其置于问题中。这里有一个链接: http://picasaweb.google.com/lh/photo/4UaoSlNbidugee6xVmuyyQ?authkey=Gv1sRgCOOl86zz4sHDOA&feat=directlink – Adam 2009-10-18 17:43:42

回答

5

iPhone应用程序中的视图按层次排列 - 即每个视图具有“父”视图(除了根视图)。有趣的是,UIWindow本身就是UIView的子类,所以你可以直接将所有四个视图添加到你的窗口。 (这可能不是最好的办法,但它可能是最简单的。)

你真正需要做的是初始化您的每四个视图编程方式与您希望他们有在一个UIWindow的位置和尺寸。您可以通过在init方法中或之后(取决于视图类型)给每个视图提供frame参数来执行此操作。因此,举例来说,在你的应用程序代理,你可以添加以下代码:

CGRect frame = CGRectMake(0.0, 0.0, 100.0, 100.0); 
UIView *view = [[[UIView alloc] initWithFrame:frame] autorelease]; 
[window addSubview:view];

这将创建一个100×100像素的视图,并把它添加到窗口的左上角。你可以为其他三个视图做类似的事情。

请注意,开发人员通常不会直接在应用程序委托中初始化视图 - 更好的方法可能是让第五个视图占据其他四个视图的根视图,然后将该视图添加到该窗口。你可以使用第五视图的视图控制器来简化这个任务 - 将视图初始化代码移动到视图控制器的实现中,然后从应用程序委托中实例化视图控制器并让它从那里接管。

+0

真棒,谢谢!这工作。我注意到我必须将所有东西都转移或切断。我猜这是因为标题栏。 – Adam 2009-10-18 18:03:07

+0

如果你创建一个UIView子类来封装这些东西,它的layoutSubviews方法将是定位东西的地方。这将在视图的尺寸发生变化时随时调用,等等。 – 2009-10-18 21:06:36

+0

@Adam:yup,标题栏占用20px并覆盖窗口。这是关于使用一个新的UIView作为你的根而非窗口本身的方便之一 - 你可以使用(0,0)作为你可见的坐标原点,而不是(0,20)。 – Tim 2009-10-19 02:11:21

0

您可以使用[self parentViewController]来获得访问父的UIView

相关问题