使用另一个nib文件中的nib文件加载视图

时间:2011-02-26 22:33:33

标签: iphone cocoa-touch interface

我确信这很简单,但我不能让它发挥作用。

我有一个名为viewController的UIViewController,包括一个应该加载其他几个视图的nib。其他四个视图是我的类BlockView(UIView的子类)的视图。我也为BlockView类创建了一个nib文件(通过创建一个新的nib并将它的文件所有者设置为BlockView,还有其他的东西可以在这里完成吗?)。 在viewController中,我拖入四个UIViews并将其文件所有者的Class'设置为BlockView。

当我运行这个时,我只看到四个白色方块,我放置BlockViews,为什么会这样?

由于

- 迈克尔

2 个答案:

答案 0 :(得分:0)

简短回答:IB没有支持您想要做的事情,但有代码解决方法可以做您想做的事。

IB最大的问题之一是名称“文件所有者”是一个可怕的名字。仅供参考,视图永远不会成为文件的所有者。文件的所有者通常是ViewController。

要执行您想要执行的操作,请在文档中查找“使用UINib和NSNib加载Nib文件”。这将向您展示如何从BlockView.xib加载BlockView。

然后你必须在代码中使用addSubview:并将框架设置到正确的位置。

如果将IB中的4个占位符块保留,则可以简单地将加载的BlockView的框架设置为占位符视图的框架。

答案 1 :(得分:0)

创建自定义类的实例并将其作为子视图添加到视图控制器的视图层次结构中:

  1. 将UIView添加到视图层次结构中。
  2. 在Identity Inspector(⌥⌘3)中,将“Class”属性设置为BlockView
  3. 这会创建一个BlockView实例,但当然它对您设计它的BlockView.xib一无所知......

    我的团队最近发现了一种有趣的方法来解决这个问题(在其他Nib中嵌入一个Nib),我写了in our iOS developer blog。紧要关系是在BlockView类中覆盖-awakeAfterUsingCoder:,将从“父”Nib加载的对象替换为从“子”Nib(BlockView.xib)加载的对象。