【问题标题】:does Interface Builder automatically instantiate the custom controllers you drag on?Interface Builder 会自动实例化您拖动的自定义控制器吗?
【发布时间】:2011-02-21 10:07:12
【问题描述】:

所以我有:

  • 创建了几个自定义 控制器(添加文件 UIViewController 子类)
  • 在 Interface Builder 中拖了两个 库中的 ViewController 项 到 MainWindow.xib(即当 applicationDelegate 是,而主要 window) 窗格,然后设置他们的类 名字是习俗的名字 控制器分别

现在我已经这样做了:

  • 这是否应该自动采取 关心实例化这些 控制器中使用 申请代表 “didFinishLaunchingWithOptions” 例如方法?

  • 还是我还需要创建这些 应用程序控制器 委托 *.h 和 *.m 文件?

  • 或者换句话说,试图 了解 IB 的实际用途 当你创造 customViewControllers 并链接它们 起来……

【问题讨论】:

    标签: iphone uiviewcontroller interface-builder


    【解决方案1】:

    更详细一点:当您将对象添加到 nib/xib 文件时,会创建活动对象,然后将其归档到 nib 文件中。当您加载一个 nib 文件时,这些归档对象将被取消归档并“恢复活力”,并使用它们最初归档时的相同设置。此外,您在 nib 文件中在实际(UILabel、UIViewController 等)对象和代理对象(“文件所有者”)之间建立的任何连接都填充有指向那些新未归档/创建的对象的指针。请注意 File's Owner 的特殊角色:分配 File's Owner 的类不是在 nib 加载时创建的。相反,在加载 nib 文件时,例如,通过以下调用:

    [[NSBundle mainBundle] loadNibNamed:@"MyNib" owner:ownerObject options:nil];
    

    所有在 ownerObject 中具有 nil 值的出口(与文件所有者中指定的类类型相同)然后连接到 nib 中的对象,然后设置为指向这些新创建的对象。

    您可以利用这一事实来创建自包含且可重用的视图层次结构,您可以在任意位置加载和使用:UITableViews 的页眉/页脚/自定义单元格,您自己创建/打包的可重用“小部件”并在整个应用程序中重复使用,等等。一旦你理解了这一点,你的 Cocoa(触摸)视图编程技能就会“上一个台阶”,创建结构化、模块化的视图对象会变得更加容易和有趣!

    【讨论】:

    • 谢谢,这正是我想要理解的事情。我开始有点了解这个想法 - 有什么建议可以阅读以更详细/完整地概述您所描述的内容吗?一些问题:(1)重新“创建活动对象” - 这是否意味着您甚至不需要在自己的代码中声明/初始化它们?,(2)重新“创建自包含的......”做你的意思是创建 UIViewController/NIB 文件只是为了重用它们的内容呢?谢谢
    • @Greg - Apple 资源编程指南有一个包含更多信息的 Nib 文件部分。 1)您需要声明一个保存/保留对象的位置(通过 IBOutlets,或手动设置从 loadNibNamed:owner:options:) 中返回的 NSArray 中的各种对象(如果您不保存任何内容,为什么要在全部?) 2)是的,我发现最有用的是创建 UIView 子类的个人“小部件库”。例如,我创建了自己的“滑动标签栏”类,它类似于标签栏但可以滚动,并在 nib 中定义了一个界面。
    【解决方案2】:

    如您所说,当 nib 文件中的组件从 nib 加载时,它们将自动实例化。 在许多情况下,您可能还希望为您的控制器提供 .h/.m 文件,以便在其中放置一些自定义代码。

    【讨论】:

      猜你喜欢
      • 2012-07-21
      • 2011-06-02
      • 2023-04-09
      • 1970-01-01
      • 2014-05-26
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多