无法更改所选自定义单元格中的图像

时间:2012-12-12 16:55:26

标签: ios uiimage tableview custom-cell

我创建了一个自定义单元格来显示文本和2个图像,当用户选择单元格时,图像应该更改。我可以访问单元格的属性,但不能更改它们:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    CustomCell *cell = (CustomCell *)[self.tableView cellForRowAtIndexPath:indexPath];
    cell.check.image = setImage:[UIImage imageNamed:@"1355327732_checkbox-checked"];
    [cell.check setImage:[UIImage imageNamed:@"1355327732_checkbox-checked"]]; }
  

cell.check是一个UIImageView

我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

如果您使用的是自定义单元格,则可以覆盖函数setSelected:animated:like so ...

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
    if (selected) {
        self.check.image = [UIImage imageNamed:@"1355327732_checkbox-checked"];
    } else {
        self.check.image = nil;
    }
}

然后您不必在tableView代码中执行任何操作来更改此设置。它会起作用。

更好的替代方法是在self.check中保持图像相同。然后你可以将hidden设置为YES或NO。这也会更高效。

为了让你从表中获得多个选择,然后在TableViewController中添加...

self.tableView.allowsMultipleSelection = YES;

这将对其进行设置,以便您可以选择多行。一次点击选择,另一次点击取消选择。

要获取所选行,您可以运行...

NSArray *selectedRows = [self.tableView indexPathsForSelectedRows];

答案 1 :(得分:0)

为什么要在同一行上调用setImage和cell.check.image?试试这个,看看结果是否相同。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    CustomCell *cell = (CustomCell *)[self.tableView cellForRowAtIndexPath:indexPath];
    //cell.check.image = setImage:[UIImage imageNamed:@"1355327732_checkbox-checked"];
    [cell.check setImage:[UIImage imageNamed:@"1355327732_checkbox-checked"]]; 

}

答案 2 :(得分:0)

我发现你的代码中存在两个问题

1)此代码:

cell.check.image= setImage:[UIImage imageNamed:@"1355327732_checkbox-checked"];

2)没有为图像提供扩展名

将其替换为:

cell.check.image= [UIImage imageNamed:@"1355327732_checkbox-checked.png"];