繁体   English   中英

UIWindow UIView addSubview问题

[英]UIWindow UIView addSubview issue

我阅读的每部视频教程和书籍都显示以下代码,以将UIView添加到UIWindow。

[window addSubview:self.viewController.view];

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

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

我遇到的第一个问题是,我在Apple网站上的UIWindow类参考文档中找不到方法“ addSubview”。 但是有人向我指出,UIWindow从UIView继承了addsubview方法。 没关系,但是为什么所有的书和在线文档都声明addsubview方法将视图添加到窗口中-怎么可能呢? 真的很困惑。 有人可以逐步解释此代码的作用吗? 如果UIWindow继承UIView的addsubview方法,那么如何将其备份到继承树中? 真的迷路了 我真正需要的是带有示例代码的小示例代码,这些代码逐步说明了所发生的事情。 真的很棒。 非常感谢

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

在上面的示例中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头文件中。 (当装入nib文件时,IBOutlet指令告诉初始化窗口对象。

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

希望这可以帮助。

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

而已。 我认为您不了解什么是继承。 隐喻是“是”。 UIWindow是“ UIView”。 具有 UIView 拥有的一切,以及更多。 UIView拥有的一件事就是addSubview的功能。 因此,UIWindow也具有该功能。 它不需要任何其他UIView即可完成此操作。 是一个 UIView。 它可以自己做。

尝试

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

那是我的头上的问题,所以它可能并不完全准确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM