Objective c 如何从nib加载UIView的多个副本?

Objective c 如何从nib加载UIView的多个副本?,objective-c,iphone,interface-builder,Objective C,Iphone,Interface Builder,我想多次使用UIView层次结构(nib对象是一个模板)。不幸的是,UIView不符合这一点 不起作用 我并不感到惊讶,因为我想要一个视图层次结构的深层副本 当前,视图是nib中加载它的几个顶级对象之一。有没有办法从nib重新加载单个指定的顶级对象?我是否应该将视图拆分为一个可以根据需要重新加载的NIB?或者有没有其他方法来制作视图的深度副本 谢谢 您不能直接将其加载到单元格的内容视图中,但您可以创建一个带有视图出口的类,并使用 [[NSBundle mainBundle] loadNibNam

我想多次使用UIView层次结构(nib对象是一个模板)。不幸的是,UIView不符合这一点

不起作用

我并不感到惊讶,因为我想要一个视图层次结构的深层副本

当前,视图是nib中加载它的几个顶级对象之一。有没有办法从nib重新加载单个指定的顶级对象?我是否应该将视图拆分为一个可以根据需要重新加载的NIB?或者有没有其他方法来制作视图的深度副本


谢谢

您不能直接将其加载到单元格的内容视图中,但您可以创建一个带有视图出口的类,并使用

[[NSBundle mainBundle] loadNibNamed:@"TheNib" owner:anObject options:nil];

关于从NIB加载表视图单元格,SO和'net提供了更多信息。我非常喜欢这种方法,但所描述的方法在许多情况下都更简单、更有效。

目前,对于我所需要的东西,这种方法似乎运行良好:

if (! templEditCellView) {
  [[NSBundle mainBundle] loadNibNamed:@"TextEditCellView" owner:self options:nil];
  if (! templEditCellView) {
    abort(); // !!
  }
}
[cell.contentView addSubview: templEditCellView];
templEditCellView = nil;
在本例中,表控制器在每个单元格的内容中放置相同的自定义视图继承权


如果我有很多不同的单元格自定义,我希望看到一种不增加nib文件的方法(就像我可能看到的那样)。

制作视图深度副本的最简单方法是归档和取消归档

id copyOfAView = 
  [NSUnarchiver unarchiveObjectWithData:
    [NSArchiver archivedDataWithRootObject:aView]]; 

将视图放在自己的nib中也很有效。您可以创建一个
NSNib
对象,并根据需要多次重新加载它。

我看到Bill的方法和我正在尝试的方法之间出现了回声。我看到单独的nib方法非常可行,只是想知道是否有更好的方法。我正在严格定制我的UITableCell视图!感谢这些好的指针。这样我就可以从nib加载一次模板对象图(UIView),将它们归档到字典中的数据中,并根据需要逐个取消归档。我可能需要知道在您的简单复制等效文件和我将归档数据缓存到内存中的想法之间的性能折衷?如果您在自己的nib文件中有问题的视图,那么我上面的建议是多余的。您可以根据需要多次加载nib。UINib*)nibWithNibName将允许您跳过存档步骤将nib作为存档加载。请注意,这不会复制绑定到aView中控件的界面生成器操作。
id copyOfAView = 
  [NSUnarchiver unarchiveObjectWithData:
    [NSArchiver archivedDataWithRootObject:aView]];