2013-10-25 100 views
0

我添加了uitableview,在其中我試圖添加自定義的UIButton。它已成功添加此代碼:刷新uitableview的內容

image=[UIButton buttonWithType:UIButtonTypeCustom]; 
    image.frame=CGRectMake(240, 7, 25, 25); 
    image.tag=101; 


    image2=[UIButton buttonWithType:UIButtonTypeCustom]; 
    image2.frame=CGRectMake(240, 7, 25, 25); 
    image2.tag=102; 

    if ([outputlabel.text isEqualToString:@"Yes"]||[outputlabel.text isEqualToString:@"Yes"]) { 
     [image setImage:[UIImage imageNamed:@"tick.png"] forState:UIControlStateNormal]; 
     [cell1.contentView addSubview:image]; 
     [cell1.contentView bringSubviewToFront:image]; 
    } 
    else 
    { 
     [image2 setImage:[UIImage imageNamed:@"cross.png"] forState:UIControlStateNormal]; 
     [cell1.contentView addSubview:image2]; 
     [cell1.contentView bringSubviewToFront:image2]; 
    } 

它首先運行良好。當表格視圖重新加載時,它與uibutton舊圖像重疊。我無法用新值刷新整個表格。有人知道我在代碼中做錯了什麼。

enter image description here

+0

嘗試使用[cell1.contentView setNeedsDisplay:True]每次你設置圖像來刷新單元格 – Neha

回答

2

已更新。總是在cell == nil區塊中創建單元格的內容視圖。使用內容查看外面的標籤。然後只有它不會重疊,完全重用烏爾細胞..

if (cell == nil) 
{ 

cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIndentifier]; 

//Add your button here.. set the tag. 
    UIButton image=[UIButton buttonWithType:UIButtonTypeCustom]; 
    image.frame=CGRectMake(240, 7, 25, 25); 
    image.tag=101; 
} 


    UIButton *btn = (UIButton *)[cell.contentView viewWithTag:101]; 

    if ([outputlabel.text isEqualToString:@"Yes"]||[outputlabel.text isEqualToString:@"Yes"]) 
     { 
       [btn setImage:[UIImage imageNamed:@"tick.png"] forState:UIControlStateNormal]; 
      } 
      else 
      { 
       [btn setImage:[UIImage imageNamed:@"cross.png"] forState:UIControlStateNormal]; 
      } 

只要做到像這樣的cellForRowAtIndexPath ..它將對你有幫助..

+0

不工作@TamilKing –

+0

@MinkleGarg:讓我知道你現在得到wt錯誤?然後你把cellForRowAtIndexPath的完整代碼和你的[yourTableView重新加載]把這個方法也..然後請告訴你爲什麼你使用兩個按鈕使用一個按鈕vhange該按鈕的圖像等待我將更新我的代碼那樣 – TamilKing

+0

@MinkleGarg:Try這肯定會對你有用。 – TamilKing

0

確保您實現-cellForRowAtIndexPath :.然後通過調用reloadRowsAtIndexPaths:withRowAnimation:在有問題的tableView上刷新你的tableViewCells。 tableView將依次調用cellForRowAtIndexPath,並且您只需在那裏返回配置的單元格。

如果您擁有靜態單元格,您可以通過將控件掛接到IBOutlet來訪問需要更改的任何內容。

2

基本上,如果我們想引用tableview的內容然後需要使用這個reloadData。你嘗試: -

[yourTableView reloadData]; 
+0

是的,我做到了這一點..文本得到完美更新,但在圖像中得到問題 –

+0

你正在得到的圖像中的問題是什麼? –

+0

它重疊。假設索引0處的第一個tym,根據數組存在tick.png圖像。和完美的表格顯示。但如果第二次索引0包含cross.png圖像,則舊圖像保持相同位置並且第二圖像也添加到那裏。 –

0

嘗試刷新使用

[cell1.contentView setNeedsDisplay:TRUE]; 
每次設定的圖像時

您單元的視圖。

0

我懷疑,你在-tableView:cellForRawAtIndexPath:方法中添加這個圖像。首先,如果您重複使用具有某個重用標識符的單元格,Cell將保留在內存中,並在需要時重用。這意味着您的單元格的所有子視圖都將保留。在這種情況下,你需要準備好每一次重複使用的單元格。例如 - 刪除單元格的所有子視圖。

但更好的方法,我建議在少數操作的情況下 - 創建UITableViewCell的子類並添加UIButton作爲該單元的屬性。

然後,您只需要根據您的情況更改此屬性。

if ([outputlabel.text isEqualToString:@"Yes"]) { 
    [cell1.button setImage:[UIImage imageNamed:@"tick.png"] forState:UIControlStateNormal]; 
} 
else 
{ 
    [cell1.image setImage:[UIImage imageNamed:@"cross.png"] forState:UIControlStateNormal]; 
} 

當然,您的按鈕必須添加到Cell初始化程序的cell.contentView中。通常它是您的自定義單元格.m文件的方法-initWithStyle:reuseIdentifier: