刷新uitableview内容

时间:2013-10-25 06:28:56

标签: objective-c uitableview

我添加了uitableview,其中我尝试添加自定义UIButton。使用以下代码成功添加:

    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

5 个答案:

答案 0 :(得分: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中这样做..这对你有帮助..

答案 1 :(得分:2)

基本上,如果我们想刷新tableview的内容,那么需要使用这个reloadData。你试过了吗? -

[yourTableView reloadData];

答案 2 :(得分:0)

确保实现-cellForRowAtIndexPath:。然后通过在相关的tableView上调用reloadRowsAtIndexPaths:withRowAnimation:来刷新tableViewCells。 tableView将依次调用cellForRowAtIndexPath,你只需返回那里配置的单元格。

如果您有静态单元格,只需将控件连接到IBOutlet即可轻松访问需要更改的内容。

答案 3 :(得分:0)

尝试使用

刷新单元格的视图
[cell1.contentView setNeedsDisplay:TRUE];

每次设置图像。

答案 4 :(得分: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: