我想多次使用UIView层次结构(nib对象是模板)。不幸的是,UIView不符合< NSCopying>所以
[cell.contentView addSubview: [[templEditCellView copy] autorelease]];
不起作用。
我并不感到惊讶,因为我想要一个视图层次结构的深层副本。
目前,视图是从中加载的nib中的几个顶级对象之一。有没有办法从笔尖重新加载单个指定的顶级对象?我应该将视图拆分为单个NIB,可以按需重新加载吗?或者有另一种方法来制作视图的深层副本吗?
谢谢!
答案 0 :(得分:7)
制作视图深层副本的最简单方法是归档和取消归档。
id copyOfAView =
[NSUnarchiver unarchiveObjectWithData:
[NSArchiver archivedDataWithRootObject:aView]];
将视图放在自己的笔尖中也可以。您可以创建NSNib
对象并根据需要重新加载它。
答案 1 :(得分:2)
您无法将其直接加载到单元格的内容视图中,但您可以创建一个包含视图出口的类并使用
加载它[[NSBundle mainBundle] loadNibNamed:@"TheNib" owner:anObject options:nil];
有关于SO的更多信息以及关于从笔尖加载表格视图的网络。我非常喜欢Bill Dudney's方法,但Jeff LaMarche描述的方法对于很多情况来说都更容易和更好。
答案 2 :(得分:1)
目前这似乎对我的需求很有效:
if (! templEditCellView) {
[[NSBundle mainBundle] loadNibNamed:@"TextEditCellView" owner:self options:nil];
if (! templEditCellView) {
abort(); // !!
}
}
[cell.contentView addSubview: templEditCellView];
templEditCellView = nil;
在这种情况下,表控制器在每个单元格的内容中放置相同的自定义视图层次。
如果我有很多不同的单元格自定义(我可能),我很乐意看到一种不会增加nib文件的方法。