重新加载 UITableview 不会重新加载单元格中的图像


嗨,我

有一个UITableView,我正在使用包含图像的自定义单元格。当我重新加载 UITableView 时,它重新加载正常,但图像没有删除,我也将其设置为图像为 nil,并尝试从超级视图中删除,但没有运气。

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:identity];
if (cell == nil) {
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identity DefaultsArray:defaultColAndSpacesDict];
    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    }
    cell.selectionStyle=UITableViewCellSelectionStyleNone;
}
if([[dtaDictionary allKeys] count]!=0)
{
    [cell.contentView clearsContextBeforeDrawing];
    if([defaultsArray containsObject:@"Note"])
    {
        NSString *patNotes=[[currRow objectForKey:@"pat_notes"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        NSString *appNotes=[[currRow objectForKey:@"Notes"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        if((![patNotes isEqualToString:@""] && patNotes!=nil) || (![appNotes isEqualToString:@""] && appNotes!=nil))
        {
            [cell.Note setBackgroundImage:[UIImage imageNamed:@"notes-green.png"] forState:UIControlStateNormal];
            [cell.Note setBackgroundImage:[UIImage imageNamed:@"notes-green.png"] forState:UIControlStateHighlighted];
            [cell.Note addTarget:self action:@selector(showNote:) forControlEvents:UIControlEventTouchUpInside];
        }
        else
        {
                cell.Note.imageView.image=nil;
        }
    }

我调试了程序,它正在为其分配零。 我也尝试了从ImageView的SuperView中删除。可能是什么问题?

注意:Cell.Note是一个UIButton

您没有首先在 if 条件中将图像分配给 imageView。

例如:

   if((![patNotes isEqualToString:@""] && patNotes!=nil) || (![appNotes isEqualToString:@""] && appNotes!=nil))
    {
       cell.Note.imageView.image=[UIImage imageNamed:@"notes-green.png"];
         //Rest of Code
    }
   else
    {
          cell.Note.ImageView.image=nil ;
    }

上述情况将完美运行,因为现在您正在将一些图像分配给 imageView。

但在您的情况下,您是通过调用自定义方法 setBackgroundImage: 来分配图像。在这种情况下,它被分配给在setBackgroundImage:方法中使用的其他视图。

因此,请考虑以下代码:

   if((![patNotes isEqualToString:@""] && patNotes!=nil) || (![appNotes isEqualToString:@""] && appNotes!=nil))
    {
        [cell.Note setBackgroundImage:[UIImage imageNamed:@"notes-green.png"] forState:UIControlStateNormal];
       //Rest of Code
    }
     else
    {
        [cell.Note setBackgroundImage:nil forState:UIControlStateNormal];
    }

希望它清楚!!

根据您的代码,您已将背景图像设置为控件状态的按钮。如果要更改背景图像或清除图像,则必须再次为按钮设置背景图像。

[cell.Note setBackgroundImage:[UIImage imageNamed:@"changedImage.png"] forState:UIControlStateNormal];
[cell.Note setBackgroundImage:[UIImage imageNamed:@"changedImage.png"] forState:UIControlStateHighlighted];

否则,将nil设置为背景图像或根据需要隐藏。

尝试添加[cell.Note setNeedsDisplay]

最新更新