0

我有一个自定义 UITableViewCell。我有一个UIImageView在一个之上UIButton。现在,当我单击 时UIButton,我可以切换UIImageView类似于单选按钮的图像。

问题是,当我将其切换到“是”状态时,会调用服务器进行所需的更改。现在,当我重新加载表时,UIImageView不会更改为“是”状态。我将UIButton状态设置为“已选择”,效果很好。但UIImageView不会更改为新图像。

在更新我得到这个: 在此处输入图像描述

当我真正想要这个时:在此处输入图像描述

默认状态是这样的:在此处输入图像描述

更新后的状态和默认状态UIImageView是一样的。

这里的圆形图标是UIImageView,其余的是UIButton

这就是我一直在尝试做的事情:

在自定义UITableViewCell

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    self.karmaLogo = [[UIImageView alloc] initWithFrame:CGRectMake(self.karmaButton.frame.size.width - 40, 8, 30, 30)];
    [self.karmaLogo setImage:[UIImage imageNamed:@"logo-grey"]];
    self.karmaLogo.userInteractionEnabled = NO;
    [self.karmaButton addSubview:self.karmaLogo];
}

UITableView代表中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Creates the required custom cell
    if (karmaCheck == 1) // Received from the server
    {
        cell.karmaButton.highlighted = YES;
        cell.karmaButton.selected = YES;
        cell.karmaLogo.image = nil;
        [cell.karmaLogo setImage:[UIImage imageNamed:@"logo-black"]];
        [cell.karmaLogo setNeedsDisplay];
        [cell bringSubviewToFront:cell.karmaLogo];
    }
    else
    {
        cell.karmaButton.highlighted = NO;
        cell.karmaButton.selected = NO;
        cell.karmaLogo.image = nil;
        [cell.karmaLogo setImage:[UIImage imageNamed:@"logo-grey"]];
        [cell.karmaLogo setNeedsDisplay];
        [cell bringSubviewToFront:cell.karmaLogo];
    }

执行确实会在需要时同时进入 if 和 else 块,但不会更改图像。但是 karmaButton ( UIButton) 的突出显示和选择工作正常。

4

2 回答 2

1

根据您的说法“当我重新加载表格时,UIImageView 不会更改为‘YES’状态。”

这是因为每当您重新加载表时,- (void)setSelected:(BOOL)selected animated:(BOOL)animated都会调用您在其中明确设置图像的ImageView使用[self.karmaLogo setImage:[UIImage imageNamed:@"logo-grey"]];

所以做你的条件检查- (void)setSelected:(BOOL)selected animated:(BOOL)animated而不是cellForRowAtIndexPath:(NSIndexPath *)indexPath

于 2013-09-06T17:49:56.960 回答
0

您将图像添加为按钮的子视图,因此当您突出显示按钮时图像会突出显示。我认为,您遇到问题的原因是UIImageView您未明确设置突出显示的图像时出现错误。因此,与其切换图像,不如尝试在您的if-else块之外执行此操作:

[cell.karmaLogo setImage:[UIImage imageNamed:@"logo-grey"]];
[cell.karmaLogo setHighlightedImage:[UIImage imageNamed:@"logo-black"]];
于 2013-09-06T16:43:55.933 回答