1

我正在使用 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;

    }
 }

}

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

4

2 回答 2

0

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

另外,改变:

static NSString *CellIdentifier = @"";

至 :

static NSString *CellIdentifier = @"MyCell";
于 2013-02-01T12:23:10.570 回答
0

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

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

于 2013-02-01T11:26:19.747 回答