0

我添加了 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 旧图像重叠。我无法用新值刷新整个表。有人知道我在代码中做错了什么。

在此处输入图像描述

4

5 回答 5

2

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

[yourTableView reloadData];
于 2013-10-25T06:45:12.020 回答
2

更新。始终为单元格 == 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 中执行此操作即可。它会对您有所帮助..

于 2013-10-25T06:38:35.237 回答
0

确保实现 -cellForRowAtIndexPath:。然后通过在有问题的 tableView 上调用 reloadRowsAtIndexPaths:withRowAnimation: 来刷新 tableViewCells。tableView 将依次调用 cellForRowAtIndexPath,您只需在此处返回配置的单元格。

如果您有静态单元格,您可以通过将控件连接到 IBOutlet 来简单地访问您需要更改的任何内容。

于 2013-10-25T06:34:09.877 回答
0

尝试使用刷新单元格的视图

[cell1.contentView setNeedsDisplay:TRUE];

每次设置图像。

于 2013-10-25T07:01:50.763 回答
0

我怀疑,您在-tableView:cellForRawAtIndexPath:方法中添加了这些图像。

首先-如果您使用某些重用标识符重用单元格,则该单元格将保留在内存中并在需要时重用。这意味着您的单元格的所有子视图都将被保留。在这种情况下,您需要准备每次重用的单元格。例如 - 删除单元格的所有子视图。

但更好的方法是,我建议在操作次数较少的情况下 - 创建 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 中添加。通常它是-initWithStyle:reuseIdentifier:您的自定义单元格 .m 文件的方法。

于 2014-10-08T09:47:03.883 回答