gpt4 book ai didi

ios - 复制 UITableViewCell

转载 作者:可可西里 更新时间:2023-11-01 03:25:26 25 4
gpt4 key购买 nike

我正在从 nib 文件中读取 tableView:cellForRowAtIndexPath: 中的自定义表格单元格。这对我来说非常有用,只是速度很慢。

现在,我知道从长远来看正确的做法是完全用代码创建单元格,并使用单一 View ,等等。但这是一个原型(prototype),我不想投入那么多精力。

现在,如果我只在 UIViewController 子类中读取一次 nib,然后 tableView:cellForRowAtIndexPath: 复制它,我会很高兴。我在这里的假设是复制比阅读 Nib 更快。

这是我用来加载 Nib 的方法,我从 viewDidLoad: 调用它(之后是 retain)

-(id)loadFromNamed:(NSString*)name {
NSArray *objectsInNib = [[NSBundle mainBundle] loadNibNamed:name
owner:self
options:nil];
assert( objectsInNib.count == 1 );
return [objectsInNib objectAtIndex:0];
}

到目前为止一切都很好。但问题是:我如何一遍又一遍地复制它?有可能吗?

我尝试了 [_cachedObject copy][_cachedObject mutableCopy]UITableViewCell 不支持任何一种复制协议(protocol)。

如果必须的话,我可以告诉他们忽略速度,直到我准备好完全取下 Nib ,但如果这里有容易实现的目标,我宁愿让它运行得更快一些。

有什么想法吗?

最佳答案

我认为表格单元格的复制可以与出队机制一起使用,这将允许一次创建单元格(从 nib 或以编程方式或从其他 nib 自动加载它并作为 IB 中的导出链接)然后克隆它或在需要时将其出队。

UITableViewCell 不符合 NSCopying 协议(protocol),但支持 keyed 归档/解档机制,因此可用于克隆。

基于答案“ How to duplicate a UIButton in Objective C? "我的数据源委托(delegate)方法如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellID = @"CellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID];

if (!cell) {
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:self.tableViewCell];
cell = [NSKeyedUnarchiver unarchiveObjectWithData:archivedData];
}

// ... config ...

return cell;
}

在我的例子中,self.tableViewCell 是一个从 View 的 nib 文件加载一次的单元格。

我没有测试什么会更快:“archive + unarchive”克隆或“load nib file + unarchive”框架将在 -loadNibNamed:owner:options: 的情况下执行,我使用这种方法只是出于方便的考虑,但很有可能内存操作比文件操作更快。

编辑:它似乎并不像起初看起来那么容易。由于 UIImage 不符合 NSCoding,因此在没有额外代码的情况下无法复制配置了 UIImageViews 的单元格。是的,复制整个图像绝对不是一个好习惯,感谢 Apple 指出这一点。

关于ios - 复制 UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/571158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com