iPhone sdk UITableView 单元重用标识符

Posted

技术标签:

【中文标题】iPhone sdk UITableView 单元重用标识符【英文标题】:iPhone sdk UITableView cell reuse identifier 【发布时间】:2013-02-01 11:10:31 【问题描述】:

我正在使用 UITableView。下载一本书后,我将在我的表格中添加一个复选标记图像。我已经做到了。但是,当我滚动我的表格时,即使对于未下载的书籍(即)我的表格单元格被重复使用,我也会得到图像。为此,我用谷歌搜索并检查了我的代码。一切似乎都一样。这是我的代码,

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


      UIImage *cellImage= [cacheImage getCachedImage:[listOfThumImages objectAtIndex:indexPath.row]];
      if(cellImage == nil)

    DeviantDownload *download;
    download = [DownloadsArray objectAtIndex:indexPath.row];
    cellImage = download.image;
    if (cellImage == nil)
    
        download.delegate = self;
    

NSLog(@"cellImage%@",cellImage);
UIImageView *imgView;


static NSString *CellIdentifier = @"";

cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)

    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

 

  imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(680, 60, 40, 40)];//self.view.bounds.size.width-
    [imgView1 setImage:[UIImage imageNamed:@"Downloaded.png"]];

  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if([defaults objectForKey:@"firstRun"])
    
       if([[[appDelegate selectDB] valueForKey:@"bookname"] containsObject:[listOfBooks objectAtIndex:indexPath.row]] )
      
           NSString *cellValue = [listOfBooks objectAtIndex:indexPath.row];
           cell.contentView addSubview:imgView1];
      
   return cell;

    
 


我的代码有什么问题?请帮帮我。谢谢你。

【问题讨论】:

您正在重用带有图像的单元格。因此图像仍然存在,因为您没有告诉视图控制器在重用单元格时图像不应该存在。 因为我只需要下载后的图像,我在那里添加。那么我怎么能避免重复使用我的图像呢?符合这个标准? 最简单的方法是创建UITableViewCell 的子类并将下载图像视图作为该类的属性。然后在 cellForRow 中将图像设置为 Downloaded.png 以显示它或设置为 nil 以隐藏它。 你能用示例代码详细解释一下吗?我是这个平台的新手。 不,抱歉。您必须询问您选择的搜索引擎。 【参考方案1】:

如果您希望某个单元格不显示图像,则只需删除该单元格的图像视图即可。为图像视图设置一个 view.tag,然后检索它,然后将其删除。

您现在要做的是在需要时为单元格添加图像子视图,然后将该单元格重新用于所有其他行。但是您从未删除不需要它的单元格的 imageview。

【讨论】:

你能详细解释一下吗? 你不明白什么? 我能理解,但如果你用示例代码或详细解释我会清楚。【参考方案2】:

带有UITableView 的复选标记并不像看起来那么复杂。首先,您必须保存已经有书签的行的状态。并且,在您的 cellForRowAtIndexPath 方法中进行比较。您可以在NSMutableArray 上创建。为下载的书保存 1,为未下载的书保存 0。在您的 cellForRowAtIndexPath 方法中比较 [array objectAtIndex:indexpath.row] 并相应地设置图像。

另外,改变:

static NSString *CellIdentifier = @"";

收件人:

static NSString *CellIdentifier = @"MyCell";

【讨论】:

以上是关于iPhone sdk UITableView 单元重用标识符的主要内容,如果未能解决你的问题,请参考以下文章

iPhone sdk - UIImageView 重叠问题

分组UITableView,多个部分在iPhone SDK中创建问题

iphone sdk:无法重复使用viewWithTag的单元格(无法将setText重用于重复使用的标签)

如何在 iPhone SDK 中使 tableviewcell 文本在触摸时可编辑?

Iphone sdk 自定义 uiview 方向问题

iPhone SDK:我应该如何/何时发布 UITableView 委托对象?