首页 文章

UIWindow UIView addSubview问题

提问于
浏览
2

我读过的每个视频教程和书都会显示以下代码,以便将UIView添加到UIWindow .

[window addSubview:self.viewController.view];

我对上面代码的理解是将“View”(它是UIView的一个实例)添加到窗口(这是UIWindow的一个实例) . 让我分解一下(根据我的理解):

window(UIWindow)addSubview(将View添加到窗口的方法)Self.viewController.view(简单地返回已经在UIViewController类中实例化的“view”的实例 .

我遇到的第一个问题是我在Apple网站上的UIWindow类参考文档中找不到方法“addSubview” . 然而,有人向我指出UIWindow从UIView继承了addsubview方法 . 这一切都很好,但为什么所有的书籍和在线文件都说addubview方法为窗口添加了一个视图 - 但是怎么会这样呢?真的很困惑 . 有人可以一步一步地解释这段代码在做什么吗?如果UIWindow继承了UIView的addsubview方法,那么它如何能够备份继承树呢?真丢了 . 我真正需要的是小型示例代码,其中包含逐步发生的事情的图表 . 真的很棒 . 非常感谢

3 回答

  • -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方法 . 这一切都很好,但是为什么所有的书和在线文档都说addubview方法为窗口添加了一个视图 - 但是怎么会这样呢?真的很困惑 . 有人可以一步一步地解释这段代码在做什么吗?如果UIWindow继承了UIView的addsubview方法,那么它怎样才能恢复继承树呢?“

    而已 . 我认为你不了解继承是什么 . 这个比喻是"is a" . 一个UIWindow "is a" UIView . 它拥有UIView所拥有的一切,以及更多 . UIView的一个功能是添加子视图 . 因此UIWindow也具有这种能力 . 它不需要任何其他UIView来做它 . 它 is a UIView . 它可以自己做 .

  • 0

    尝试

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

    这是我的头脑,所以它可能不完全准确 .

相关问题