2011-09-25 117 views
2

我读过的每一个视频教程和图书都会显示以下代码,以将UIView添加到UIWindow。UIWindow UIView addSubview问题

[window addSubview:self.viewController.view];

我对上述代码的理解是,“视图”(它是UIView的一个实例)被添加到窗口中(这是UIWindow的一个实例)。让我打破它(据我的理解):

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

我遇到的第一个问题是我在苹果网站的UIWindow类参考文档中找不到方法“addSubview”,但有人向我指出UIWindow继承了addsubview方法UIView。这一切都很好,但为什么所有的书籍和在线文档都声明addsubview方法会在窗口中添加一个视图 - 但是怎么会这样呢?真的很困惑。有人可以请一步一步解释一下这段代码在做什么?如果UIWindow继承UIView的addsubview方法,那么它如何恢复继承树?真的失去了。我真正需要的是具有一步一步发生的图的小示例代码。将是非常伟大的。非常感谢

+0

'UIWindow'继承自UIView'和'addSubview'方法在UIView中可用 –

回答

-1

尝试

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

这就是把我的头顶部,所以它可能不完全准确。

+0

对不起,我没有让我自己清楚。lol。无论如何我要说的是即代码[window addSubview:self.viewC ontroller.view] ;.我的问题是它究竟是如何工作的? “addSubview”添加的方法究竟是什么?它不能添加到窗口中,它也添加到视图顶部。但是如果已经有了一个观点呢? – user365426

+0

你是说窗口实际上是一个视图? – user365426

+0

但窗口甚至没有名为视图的属性?真的失去了。 – user365426

2

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

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

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

你可能会看到

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

查看代码仅仅是一个超类窗口,所以任何公众视野的方法是提供给您。

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

您应该看到您的AppDelegate头文件类似

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

。 (该IBOutlet中指令告诉当笔尖文件被加载的初始化窗口对象。

请记住,它是一个UIWindow是轻松地与其它行为和数据的UIView。

希望这有助于。

+0

辉煌。这是一个很好的答案。非常感谢。 – user365426

0

“不过有人向我指出,UIWindow继承UIView的addsubview方法,这一切都很好,但为什么所有的书籍和在线文档都声明addsubview方法为窗口添加了一个视图 - 但是怎么会这样呢?真的很困惑。有人可以请一步一步解释这段代码在做什么?如果UIWindow继承UIView的addsubview方法,那么它如何能够恢复继承树?“

就是这样,我认为你并不理解继承是什么,比喻是”是“,UIWindow是“UIView。它有一切UIView有,和更多。UIView有一个是添加子视图的能力。因此UIWindow也有这个能力。它不需要任何其他的UIView去做它。它是一个 UIView。它可以自己做。