iphone - 从一个 UIViewController 管理多个 UIView

标签 iphone uiview uiviewcontroller ios

我对 View Controller 感到困惑,想要一个直接的例子。这是序言:

我有一个带有匹配 .xib 的 UIViewController。 默认情况下,IB 在文档窗口中给我一个 View 。 我可以让我的 UIWindow 显示 addSubview:controller.viewbringSubviewToFront:controller.view

问题如下:

  1. 我应该向 IB 中的 ViewController 添加另一个 View 吗?或者有更好的程序化方式吗?

  2. 如何告诉 ViewController 在 View 之间切换?

  3. 从 ViewController 向下看,实现此目的的代码是什么样的?

我正在尝试一些事情,但只是弄得一团糟,所以我想我应该停下来问问...

最佳答案

请注意,主视图 Controller 中的每个按钮、标签、图像等实际上本身就是一个 View ,但是我将您的问题解释为您想要管理多个全屏 View 或“屏幕”。每个屏幕都应该有自己的 View Controller 来管理它。因此,为了使术语正确, View Controller 是一个管理单个全屏 View 的对象(或者如果它嵌套在导航 Controller 或选项卡栏 Controller 中,则几乎是全屏 View ), View 是管理的大区域 View Controller 以及其中的所有 subview (图像、按钮、标签等)(它们都是 UIView 子类)。 View Controller 管理该屏幕上的所有这些,如果您想要另一个屏幕/页面,那么您应该创建一个新的 View Controller 来管理它。

Root View Controller (您添加到窗口的那个)可以是您在 IB 中设计的普通旧普通 View Controller ,但是如果您使用导航 Controller 或标签栏 Controller 并添加它可能更有用你设计的 View Controller - 然后你可以根据需要推送额外的 View Controller 。

另一种方法(如果您不想要导航或选项卡栏样式)是使用您喜欢的任何转换(或只是替换旧的)直接在主窗口中转换到其他 View Controller 。不过,我们暂时保留它。

您的主视图 Controller (您在 IB 中设计的那个)的任何 subview 都将自动从 nib 文件中加载,但您也可以根据需要以编程方式添加您自己的 View (通常您会使用一个或另一个,即以编程方式 Nib ,但您可以根据需要混合搭配)。要以编程方式执行此操作,请覆盖 View Controller 中的 loadView,然后调用 [super loadView]; 然后执行 [self.view addSubView:myOtherView];(当然首先创建 myOtherView)。请注意,第一次在 View Controller 上访问 .view 时,它实际上调用了 loadView 来创建 View ,因此在 loadView 中,重要的是在尝试访问 self.view 之前调用 [super loadView]; :D

要在 View 之间切换,使用导航或标签栏 Controller 非常容易。所以把你的主视图 Controller 放在(例如)一个导航 Controller 里,然后把导航 Controller 放在窗口里,这样你就有了 window->navigationController->myController。然后从您的 View Controller 中的操作方法(您可以连接 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 View Controller 是在此处以编程方式创建的 - 如果您的 about View 是在 IB 中设计的,则改为使用 initWithNibName:bundle: 来创建它。

这就是您管理多个屏幕的方式。

关于iphone - 从一个 UIViewController 管理多个 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3851354/

相关文章:

iOS 每次将 App 发送到后台时都会对其进行截图 - 我将如何保护我的 App?

iphone - 将选择器发送到另一个类

ios - UIView 即使在开始从 superview 中移除后也会重新出现

objective-c - UIViewAnimation 导致从枚举类型隐式转换

iphone - 在多个 View 之间使用 UINavigationController 的背景图像

iphone - PushViewController 不会对 UITableView 中的 didSelectRowAtIndexPath 执行任何操作

ios - UIActivityIndi​​catorView 在 UITableViewCell 中停止动画

objective-c - UIScrollView 内的绘图 View

ios - 如何实现从 UICollectionViewController 到 UIViewController 的自定义 UIViewController 转换?

ios - 在ios中点击后退按钮后调用什么方法