2

编辑:实际上图像看起来很好,当我滚动它们时它们会混淆......

我正在解析一个 XML 文件,其中包含指向我放入 UITable 的图像的链接。由于某种原因,图片完全混淆了,当我向下滚动表格时,其中一些甚至开始改变!这是我用于 UITable 的代码:

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

    static NSString *CellIdentifier = @"Cell";
    Tweet *currentTweet = [[xmlParser tweets] objectAtIndex:indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

        CGRect imageFrame = CGRectMake(2, 8, 40, 40);
        customImage = [[UIImageView alloc] initWithFrame:imageFrame];
        [cell.contentView addSubview:customImage];

    }

    NSString *picURL = [currentTweet pic];
    if (![picURL hasPrefix:@"http:"]) {
        picURL = [@"http:" stringByAppendingString:picURL];
    }

    customImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL: [NSURL URLWithString:picURL]]];

    return cell;
}

知道我做错了什么吗?非常感谢任何帮助。谢谢!

4

3 回答 3

3

您的问题是,如果单元格不是nil(即您已成功重用已滚动出屏幕的单元格),则您没有customImage正确设置指针(因为它是一个类实例变量,它具有最后一个的值它创建的单元格)。因此,定义一些非零常量kCustomImageTag,然后将其中的if语句修改cellForRowAtIndexPath为:

if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    CGRect imageFrame = CGRectMake(2, 8, 40, 40);
    customImage = [[UIImageView alloc] initWithFrame:imageFrame];
    [cell.contentView addSubview:customImage];
    customImage.tag = kCustomImageTag;
}
else
{
    customImage = [cell.contentView viewWithTag:kCustomImageTag];
}

tag在创建时设置customImage并使用它tag来检索已customImage重用的UITableViewCell.

于 2013-01-21T14:48:39.083 回答
0

看看这个项目:https ://github.com/bharris47/LIFOOperationQueue

它展示了如何使用NSTable. 此外,如何不让您的图像混合匹配应该是一个很好的选择。

于 2013-01-21T14:14:40.633 回答
0

当您要求一个可重复使用的单元格时,如果它不是 nil,则它是您已经分配并添加子视图到它的 contentView 的一个单元格...您应该首先在 cellForRow 中删除所有子视图。

if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    CGRect imageFrame = CGRectMake(2, 8, 40, 40);
    customImage = [[UIImageView alloc] initWithFrame:imageFrame];
    [cell.contentView addSubview:customImage];

}  else {
     for (UIView *v in cell.contentView)
          [v removeFromSuperView];
}
于 2013-01-21T14:11:37.707 回答