【问题标题】:UIWindow UIView addSubview issueUIWindow UIView addSubview 问题
【发布时间】:2011-09-25 01:24:26
【问题描述】:

我读过的每个视频教程和书籍都显示了以下代码,用于将 UIView 添加到 UIWindow。

[窗口添加子视图:self.viewController.view];

我对上面代码的理解是在窗口(即UIWindow的一个实例)中添加了一个“View”(它是一个UIView的实例)。让我分解一下(根据我的理解):

窗口(UIWindow) addSubview(将视图添加到窗口的方法) Self.viewController.view(只返回一个已经在 UIViewController 类中实例化的“视图”的实例。

我遇到的第一个问题是我在苹果网站的 UIWindow 类参考文档中找不到方法“addSubview”。但是有人好心地向我指出,UIWindow 继承了 UIView 的 addsubview 方法。没关系,但是为什么所有的书和在线文档都声明 addsubview 方法向窗口添加了一个视图——但这怎么可能呢?真的很困惑。有人可以逐步解释这段代码在做什么吗?如果 UIWindow 继承了 UIView 的 addsubview 方法,那么它如何返回继承树呢?真的输了。我真正需要的是带有逐步发生的图表的小示例代码。真的很棒。非常感谢

【问题讨论】:

  • UIWindow 继承自 UIViewaddSubview 方法在 UIView 中可用。

标签: iphone uiview sdk uiwindow


【解决方案1】:

将窗口视为与屏幕或绘图对象直接关联的视图。

在上面的例子中 window.view 是不正确的。窗口不包含视图,它是具有附加行为的视图。

假设您正在从 NIB 文件加载 UIViewController,与 viewController 关联的视图将通过访问视图来实例化。所以...

你可能会看到类似的代码

MyViewController *vc = [MyViewController alloc]initWithNibName:@"MyNibFile" bundle:nil]autorelease];
[window addSubView:vc.view];
[window makeKeyAndVisible];

View 只是 Window 的一个超类,因此您可以使用任何公共视图方法。

通常,当加载 MainWindow.xib 文件时,会实例化 AppDelegate 对象中的窗口。

你应该看到类似的东西

@property(nonatomic, retain) IBOutlet UIWindow *window;

在您的 AppDelegate 头文件中。 (IBOutlet 指令告诉在加载 nib 文件时初始化窗口对象。

请记住,UIWindow 只是具有附加行为和数据的 UIView。

希望这会有所帮助。

【讨论】:

  • 太棒了。这是一个很好的答案。非常感谢。
【解决方案2】:

“但是有人好心地向我指出,UIWindow 从 UIView 继承了 addsubview 方法。这很好,但是为什么所有的书和在线文档都声明 addsubview 方法向窗口添加了一个视图——但这怎么可能呢?真的很困惑。谁能一步一步解释这段代码在做什么?如果 UIWindow 继承了 UIView 的 addsubview 方法,那它怎么能回到继承树上呢?“

就是这样。我认为您不了解继承是什么。比喻是“是一个”。 UIWindow “是” UIView。它拥有 UIView 所拥有的一切,甚至更多。 UIView 拥有的一件事是添加子视图的能力。因此 UIWindow 也有这种能力。它不需要任何其他 UIView 来完成它。它是一个 UIView。它可以自己做。

【讨论】:

    【解决方案3】:

    试试

    [window.view addSubview:self.viewController.view];
    

    这不是我想出来的,所以它可能并不完全准确。

    【讨论】:

    • 对不起,我没有说清楚。哈哈。反正我想说的是代码[window addSubview:self.viewController.view];。我的问题是它究竟是如何工作的? “addSubview”方法到底添加了什么?它不能添加到窗口中,因此将其添加到视图之上。但是如果已经有视图怎么办。
    • 你是说窗口实际上是一个视图?
    • 但是window甚至没有一个叫做view的属性?真的输了。
    • 嗯,从我读到的内容(很久以前再次从记忆中)我认为 addSubview 是我所说的别名。这就是它没有被记录的原因。
    • 好的。最后一个问题。我已经用谷歌搜索了这个问题,但找不到任何答案。大多数普通人是否会毫无疑问地使用苹果文档、视频教程和书籍中的内容(就像我所做的那样)?我有轻度强迫症,因此认为我做的事情太多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多