2013-10-25 217 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: