gpt4 book ai didi

iphone - UITableView的UITableViewCell下两种方式访问​​UIImageView的区别

转载 作者:行者123 更新时间:2023-11-29 04:50:29 25 4
gpt4 key购买 nike

我有一个自定义表格 View 来通过网络服务加载新闻。我在方法 cellForRowAtIndexPath 中更改每个单元格中的图像。获得正确的单元格后,我可以通过两种方式访问​​图像:

    UIImageView *imageView = (UIImageView *)[cell viewWithTag:12];
imageView.image = news.image;

或直接:

    cell.imageView.image = news.image;

当我使用第二种方式时,一些图像进入错误的单元格,而第一种方式给了我完美的结果。它也发生在回调方法 iconDownLoadFinsh 中。

我对此感到困惑。有人可以尝试解释一下吗?请随时提问。提前致谢。

- (void)iconDownLoadFinsh:(NSData *)imageData row:(NSIndexPath *)indexPath {

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
UIImageView *imageView = (UIImageView *)[cell viewWithTag:12];
imageView.image = [UIImage imageWithData:imageData];
NewsModel *newsModel = [newsArray objectAtIndex:indexPath.row];
newsModel.image = [UIImage imageWithData:imageData];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"NewsCellIdentifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"NewsTableViewCell" owner:self options:nil];
cell = newsTableViewCell;
newsTableViewCell = nil;
}

// read from newsModel
NewsModel *news = [newsArray objectAtIndex:indexPath.row];

UILabel *label;
label = (UILabel *)[cell viewWithTag:10];
label.text = [NSString stringWithFormat:news.title];
label = (UILabel *)[cell viewWithTag:11];
label.text = [NSString stringWithFormat:news.description];
UIImageView *imageView;
imageView = (UIImageView *)[cell viewWithTag:12];
imageView.image = news.image;

if (news.image == nil)
{
imageView.image = [UIImage imageNamed:IconPlaceHolder];

// if (self.tableView.dragging == NO && self.tableView.decelerating == NO) {

IconDownLoader *iconDownLoader = [[IconDownLoader alloc] init];
iconDownLoader.url = news.imageUrl;
iconDownLoader.delegate = self;
iconDownLoader.indexPath = indexPath;
[downloadArray addObject:iconDownLoader];
[iconDownLoader start];
// }
}

return cell;
}

最佳答案

我通常总是在方法中重置单元格属性

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

所以我会在收到单元格后执行以下操作

if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"NewsTableViewCell" owner:self options:nil];
cell = newsTableViewCell;
newsTableViewCell = nil;
}
cell.imageView.image = nil; // Here resetting the imageview's image to nil.

因为您正在重复使用单元格,如果不清除旧数据,单元格数据可能会损坏。

关于iphone - UITableView的UITableViewCell下两种方式访问​​UIImageView的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8935964/

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