我对视觉控制器感到困惑,并且会喜欢一个直接的例子。这是序言:
我有一个匹配.xib的UIViewController。
默认情况下,IB在“文档”窗口中为我提供了一个视图。
我可以通过告诉我的UIWindow addSubview:controller.view
和bringSubviewToFront:controller.view
以下是问题:
我应该将另一个视图添加到IB中的ViewController吗?或者有更好的,有条理的方式吗?
如何告诉ViewController在视图之间切换?
从ViewController向下,代码看起来是什么样的?
我正在尝试但只是弄得一团糟,所以我想我会停下来问......
答案 0 :(得分:7)
请注意,主视图控制器中的每个按钮,标签,图像等实际上都是一个视图,但我将您的问题解释为意味着您要管理多个全屏视图或“屏幕”。每个屏幕都应该有自己的视图控制器来管理它。因此,为了使术语正确,视图控制器是一个管理单个全屏视图的对象(例如,如果它嵌套在导航控制器或标签栏控制器中,则几乎全屏),视图是由视图控制器以及其中的所有子视图(图像,按钮,标签等)(它们都是UIView子类)。视图控制器在该屏幕上管理所有这些,如果您想要另一个屏幕/页面,那么您应该创建一个新的视图控制器来管理它。
根视图控制器(您添加到窗口的控制器)可以是您在IB中设计的普通旧普通视图控制器,但是如果您使用导航控制器或标签栏控制器并添加它可能更有用您设计的视图控制器 - 然后您可以根据需要推送其他视图控制器。
另一种方式(如果你不想要导航或标签栏样式)将使用你喜欢的任何转换(或者只是替换旧转换)直接在主窗口中转换到其他视图控制器。我们暂时不会这样做。
您的主视图控制器(您在IB中设计的那个)的任何子视图都将从nib文件自动加载,但如果您需要,也可以以编程方式添加自己的视图(通常您可以使用一个或另一个,即以编程方式loadView
,然后调用[super loadView];
,然后执行[self.view addSubView:myOtherView];
(当然首先创建myOtherView
)。请注意,第一次在视图控制器上访问.view
时,它实际上会调用loadView
来创建视图,因此在loadView
内部,在尝试访问之前调用[super loadView];
非常重要self.view
:D
要在视图之间切换,使用导航或标签栏控制器可以非常轻松。因此,将主视图控制器放在(例如)导航控制器中并将导航控制器放在窗口中,这样你就有了window-> navigationController-> myController。然后从视图控制器中的动作方法(您可以在IB中连接动作方法),例如当按下“关于”按钮时执行以下操作:
- (void)doAbout
{
// Create the about view controller
AboutViewController* aboutVC = [AboutViewController new];
// Push the view controller onto the navigation stack
[self.navigationController pushViewController:aboutVC animated:YES];
[aboutVC release];
}
请注意,about视图控制器是以编程方式在此处创建的 - 如果您的视图是在IB中设计的,那么请使用initWithNibName:bundle:
来创建它。
这就是你管理多个屏幕的方式。