在我的项目中,我通过继承UITableViewCell
来创建自定义单元格。当cellForRowAtIndexPath:
被解雇时,我会做一些非常基本的事情,比如:
MyCustomCell *cell = [self.tableView dequeueReusableCellWithIdentifier:[MyCustomCell identifier]];
我不想在cellForRowAtIndexPath:
中手动配置单元格属性,所以我想我会在MyCustomCell
内创建一个名为configureWithModel:
的方法,该方法正在填充{{1}有适当的数据。到现在为止还挺好!现在在MyCustomCell
里面我有类似的东西:
cellForRowAtIndexPath:
在MyCustomCell *cell = [self.tableView dequeueReusableCellWithIdentifier:[MyCustomCell identifier]];
[cell configureWithModel:model];
我将一些数据(也是图片)分配到单元格中,因为您猜测它可能很慢而且很重,所以我想知道这是不是很好解决方案在configureWithModel:
的子类中有这样的方法?更重要的是,它与MyCustomCell
的关系如何?
答案 0 :(得分:0)
执行此[cell configureWithModel:model];
是最好的方法,因为如果您希望在2个以上的tableView中使用configureWithModel:
,则可以避免代码冗余,并且单元格本身也可以控制单元级别。
答案 1 :(得分:0)
使用[cell configureWithModel:model];
会使您的代码看起来更结构化,但对于图像使用以下代理
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
示例:
- (void)tableView:(UITableView *)tableView willDisplayCell:(AlbumCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
AlbumBO *album = [self.arrAlbums objectAtIndex:indexPath.row];
dispatch_async(imageQueue_, ^{
UIImage *image = [self retrieveImageWithImageUrl:album.coverPhoto];
dispatch_async(dispatch_get_main_queue(), ^{
[cell.imgVwAlbum setImage:image];
});
});
}
这里
AlbumCell是我的自定义表格单元格 AlbumBO是包含图像对象的对象
和
[self retrieveImageWithImageUrl:album.coverPhoto]
是用户定义的下载图像的方法。
答案 2 :(得分:0)
这听起来像是单一责任原则的相当不错的用法。如果您的单元格需要与必须从服务器下载的图像绑定,那么这可能会让您感到困惑。在这种情况下,您不希望您的单元负责触发下载,因为单元格也将负责监视下载的进度。由于这些细胞是可重复使用的,因此随着细胞的重复使用,这变得更加成问题。
所以是的,在需要将数据绑定到单元格的简单情况下,单元格负责使用相关数据配置其子视图是有意义的。
关于prepareForReuse
随意浏览documentation详细信息
讨论如果UITableViewCell对象是可重用的 - 也就是说,它有一个 重用标识符 - 在对象之前调用此方法 从UITableView方法返回 dequeueReusableCellWithIdentifier :.出于性能原因,你 应该只重置与之无关的单元格的属性 内容,例如,alpha,编辑和选择状态。桌子 tableView中的view委托:cellForRowAtIndexPath:应该总是如此 重新使用单元格时重置所有内容。如果单元格对象没有 具有关联的重用标识符,不调用此方法。如果你 重写此方法,您必须确保调用超类 实施