Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在一个窗口中显示多个视图_Iphone_View - Fatal编程技术网

Iphone 在一个窗口中显示多个视图

Iphone 在一个窗口中显示多个视图,iphone,view,Iphone,View,我正在编写一个基于视图的应用程序,但我对加载视图有点困惑。我希望在同一窗口中同时加载四个不同的视图。我似乎不知道该怎么做。如果可能的话,我更喜欢用编程方式而不是用界面生成器 我的4个视图是:UIView、UIWebView、UITableView和另一个带按钮的UIView 提前感谢您的帮助。iPhone应用程序中的视图是按层次排列的,即每个视图都有一个“父”视图(根视图除外)。这里有趣的是UIWindow本身就是UIView的一个子类,因此您可以直接将所有四个视图添加到窗口中。(这可能不是最好

我正在编写一个基于视图的应用程序,但我对加载视图有点困惑。我希望在同一窗口中同时加载四个不同的视图。我似乎不知道该怎么做。如果可能的话,我更喜欢用编程方式而不是用界面生成器

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


提前感谢您的帮助。

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];
这将创建一个100x100像素的视图,并将其添加到窗口的左上角。您可以为其他三个视图中的每一个执行类似的操作


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

您可以使用
[self-parentViewController]
要访问父UI视图

能否更详细地描述这些视图的排列方式?这都是一个屏幕吗?也许贴一张你想做什么的草图?当然可以。它基本上是一个视图同时叠加在另一个屏幕上。每一个都占据了屏幕的一部分。抱歉,我不知道如何发布草图。我知道如何发布图片,但我没有足够的代表点来回答这个问题。这里有一个链接:太棒了,谢谢!成功了。我注意到我必须把所有的东西都放下,否则它就会被切断。我猜这是因为标题栏。如果你创建一个UIView子类来封装这些东西,它的layoutSubviews方法就是定位这些东西的地方。只要视图的尺寸发生变化,就会调用它。是的,标题栏占据了20px并覆盖了窗口。这是使用新UIView作为根而不是窗口本身的一个方便的方法-您可以使用(0,0)作为可见坐标原点,而不是(0,20)。@Tim:我记下您的笔记,并将视图放在一个视图控制器中。我现在的问题是,如何从viewcontroller访问窗口?如果我这样做[超级窗口],我会得到一个警告,所以我猜这是错误的方法。@Adam:你真的需要吗?理想情况下,您要做的是:在应用程序委托中创建视图控制器及其视图层次结构,将视图控制器的视图添加到委托中的窗口,然后所有视图控制器的视图将只处理控制器中的其他视图(包括“根”视图),而不是窗口。