2010-05-07 41 views
3

我想多次使用一个UIView层次结构(该nib对象是一个模板)。不幸的是,UIView不符合< NSCopying>所以如何获取从笔尖加载的UIView的多个副本?

[cell.contentView addSubview: [[templEditCellView copy] autorelease]]; 

不起作用。

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

当前视图是从它加载的笔尖中的几个顶级对象之一。有没有办法从笔尖重新加载一个指定的顶级对象?我是否应该将视图拆分为可以按需重新加载的单个NIB?或者有另一种方法可以制作一个视图的深层副本吗?

谢谢!

回答

2

你不能直接加载到单元格的内容视图,但您可以创建带插座的视图(S)的一类,并与

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

还有更多的信息围绕SO加载和'关于从nibs加载表格视图单元的网络。我非常喜欢Bill Dudney's的方法,但Jeff LaMarche描述的方法对于许多情况来说更容易和更好。

+0

我看到比尔的方法和我正在尝试的方法之间的回声。我发现独立笔尖的方法是可行的,只是想知道有没有更好的方法。我严格定制我的UITableCell视图! 感谢您的指点。 – dmaestro12 2010-05-07 16:15:53

1

这似乎是此刻我需要什么工作好:

if (! templEditCellView) { 
    [[NSBundle mainBundle] loadNibNamed:@"TextEditCellView" owner:self options:nil]; 
    if (! templEditCellView) { 
    abort(); // !! 
    } 
} 
[cell.contentView addSubview: templEditCellView]; 
templEditCellView = nil; 

表控制器放置相同的自定义视图层次结构中的每个细胞在这种情况下的内容。

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

7

制作视图深层副本的最简单方法是将其归档并取消归档。

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

把视图放在自己的笔尖上也起作用。您可以创建一个NSNib对象并根据需要多次重新加载它。

+0

所以我可以从一个笔尖加载我的模板对象图(UIViews)一次,将它们归档到字典中的数据,并根据需要单独解压缩它们。我可能需要知道您的简单副本与我在内存中缓存存档数据的想法之间的性能折衷? – dmaestro12 2010-05-10 18:24:59

+0

如果你在他们自己的nib文件中有问题的话,那么我上面的建议是多余的。您可以根据需要多次加载笔尖。 – NSResponder 2010-05-12 09:54:29

+0

UINib *)nibWithNibName将允许您加载一个笔尖作为归档跳过归档步骤。 – zaph 2011-07-23 13:29:47