Objective c 刷新uitableview内容

Objective c 刷新uitableview内容,objective-c,uitableview,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=CGRectM

我添加了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];
    }
一开始它工作正常。重新加载表视图时,它与旧图像重叠。我无法用新值刷新整个表。有人知道我在代码中做错了什么


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


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

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


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

已更新。始终为单元格==nil块中的单元格创建内容视图。通过标记在外部使用contentview。。只有这样它才不会完全重叠和重复使用你的细胞

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

只需在CellForRowatineXpath中这样做。。它将对您有所帮助。

更新。始终为单元格==nil块中的单元格创建内容视图。通过标记在外部使用contentview。。只有这样它才不会完全重叠和重复使用你的细胞

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

只需在CellForRowatineXpath中这样做。。这将对您有所帮助。

基本上,如果我们想要引用tableview的内容,那么需要使用此重新加载数据。您是否尝试过:-

[yourTableView reloadData];

基本上,如果我们想要引用tableview的内容,那么需要使用这个重载数据。您是否尝试过:-

[yourTableView reloadData];

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

[cell1.contentView setNeedsDisplay:TRUE];

每次设置图像时。

尝试使用刷新单元格视图

[cell1.contentView setNeedsDisplay:TRUE];

每次设置图像时。

我怀疑,您是在
-tableView:cellforrawatinexpath:
方法中添加此图像的

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

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

我怀疑,您是在
-tableView:cellforrawatinexpath:
方法中添加此图像的

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

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

是的,我这样做了。。文本得到了完美的更新,但在图像中出现了问题在图像中出现了什么问题?它会重叠。假设第一个tym位于索引0处,根据数组,有tick.png图像。和表视图显示完美。但是,如果第二次索引0包含cross.png图像,则旧图像将保持不变,并且第二个图像也添加到了该位置。请在编写图像代码时检查您的方法。问题似乎没有刷新,因为其他文本正在正确刷新。请重新检查你的代码你可以再做一件事只是根据条件隐藏你的图像??是的,我这样做了。。文本得到了完美的更新,但在图像中出现了问题在图像中出现了什么问题?它会重叠。假设第一个tym位于索引0处,根据数组,有tick.png图像。和表视图显示完美。但是,如果第二次索引0包含cross.png图像,则旧图像将保持不变,并且第二个图像也添加到了该位置。请在编写图像代码时检查您的方法。问题似乎没有刷新,因为其他文本正在正确刷新。请重新检查你的代码你可以做一件事只是根据条件隐藏你的图像???@MinkleGarg:让我知道你现在有什么wt错误?然后你把cellForRowAtIndexPath的完整编码放在你[yourTableView reload]放在的地方。然后请告诉我为什么使用两个按钮使用一个按钮改变按钮的图像等等我会像那样更新我的代码-(void)finalstatus{statuslisttable.delegate=self;statuslisttable.dataSource=self;[[self statuslisttable]重载数据];[self.view addSubview:transparentpage];[self.view addSubview:showstatus];}@MinkleGarg:-(void)finalstatus在这里,您再次为表设置数据源和委托的原因。。你在-(void)viewDidLoad中设置正确了,这就足够了。@MinkleGarg:让我看看你现在有什么错误?然后你把cellForRowAtIndexPath的完整编码放在你[yourTableView reload]放在的地方。然后请告诉我为什么使用两个按钮使用一个按钮改变按钮的图像等等我会像那样更新我的代码-(void)finalstatus{statuslisttable.delegate=self;statuslisttable.dataSource=self;[[self statuslisttable]重新加载数据];