【问题标题】:Replacing a UIViewController root view with my own view用我自己的视图替换 UIViewController 根视图
【发布时间】:2010-12-06 12:57:01
【问题描述】:

我正在尝试用子类 UIView 替换 UIViewController 根视图。

在 iPhone SDK 的 UIViewController 类参考中,在它的概述部分中,如下所述:

您使用 UIViewController 的每个实例来管理全屏视图。对于一个简单的视图控制器,这需要管理负责呈现应用程序内容的视图层次结构。典型的视图层次结构由一个根视图(在此类的视图属性中提供的一个引用)和一个或多个呈现实际内容的子视图组成。

按照视图属性上的链接,它会声明:

如果您的视图控制器没有关联的视图控制器,您应该重写 loadView 方法并使用它来创建根视图及其所有子视图。

如果将此代码放在 loadView 中,它是否会创建根视图,假设我使用的是我自己的 UIView 子类 MyView:

self.view = [MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];

谢谢 // :)

【问题讨论】:

    标签: iphone objective-c uiviewcontroller loadview


    【解决方案1】:

    你是对的。 loadView函数在需要显示视图时调用,viewController的view属性是使用presentModalViewController:animated:等函数时显示的视图。如果您从 NIB 加载视图而不是使用 loadView,则只需在该视图的属性选项卡中将视图的类更改为您的自定义子类。

    【讨论】:

    • loadView 的文档声明如下:You can override this method in order to create your views manually. If you choose to do so, assign the root view of your view hierarchy to the view property. The views you create should be unique instances and should not be shared with any other view controller object. Your custom implementation of this method should not call super.
    【解决方案2】:

    您应该注意,您将view 属性设置为的任何内容都会被保留。所以你应该使用

    self.view = [[[MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];
    

    MyView *v = [[MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    self.view = v;
    [v release];
    

    平衡一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多