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

时间:2013-10-22 06:06:32

标签: ios objective-c uitableview

您好我有 UITableView ,我在其中使用包含图片的自定义单元格。当我重新加载 UITableView 时,它正在重新加载,但是图像没有移除我将此设置为图像也为nil并尝试了removeFromSuperView,但没有运气。

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;
        }
    }

我调试了程序,它正在为它分配nil。我也试过了ImageView的removeFromSuperView。可能是什么问题?

注意:Cell.Note是一个UIButton

3 个答案:

答案 0 :(得分:1)

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

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

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

否则将nil设置为背景图像,或者只在需要时隐藏。

答案 1 :(得分:1)

您没有在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:method。

中使用的其他视图

因此,请考虑以下代码:

   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];

    }

希望它清楚!!!

答案 2 :(得分:-1)

尝试添加[cell.Note setNeedsDisplay]