2013-10-22 139 views
-1

您好我有一個UITableView和我使用其中包含圖像的自定義單元格。當我重新加載UITableView它重新加載只是好的,但圖像不刪除我把它設置爲圖像爲零,並嘗試removeFromSuperView也沒有運氣。重新加載UITableview不會重新加載單元格中的圖像

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

+0

在if條件添加斷點並檢查,確定條件總是成立。 – iPatel

+0

嘗試[cell.Note setBackgroundImage:nil]; –

+0

iPatel我嘗試使用斷點它分配爲零。 – Hassy

回答

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:方法內使用的其他視圖。

所以對於考慮下面的代碼:

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

    } 

希望其清除!

-1

嘗試增加[cell.Note setNeedsDisplay]

+0

在這裏,他沒有畫任何東西......那麼爲什麼我們稱之爲'setNeedDisplay'? – Mani

+0

你必須調用它來強制刷新單元格內重用的imageView – slecorne

+0

爲什麼你必須強制刷新?重新加載時,它已經刷新了你的按鈕。那麼爲什麼我們需要再次調用它?根據你的觀點,重新加載時是不是要打電話? – Mani

1

根據你的代碼,你已經設置背景圖片按鈕控制狀態。如果你想改變背景圖像或清晰圖像,你必須重新設置背景imgae按鈕。

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

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

否則,置零背景圖像或只是隱藏如果u需要。