1

我创建了一个自定义单元格来显示一个文本和 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

我错过了什么吗?

4

3 回答 3

2

如果您使用的是自定义单元格,那么您可以覆盖函数 setSelected:animated: 像这样......

- (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 中保持图像相同。然后,您可以相应地将隐藏设置为 YES 或 NO。这也将更加高效。

为此,您可以从表中获得多个选择,然后在 TableViewController 中放置...

self.tableView.allowsMultipleSelection = YES;

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

要获取选定的行,您可以运行...

NSArray *selectedRows = [self.tableView indexPathsForSelectedRows];
于 2012-12-12T16:58:34.590 回答
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"]]; 

}

于 2012-12-12T17:02:47.943 回答
0

我注意到您的代码中有两个问题

1)这段代码:

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

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

将其替换为:

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

于 2012-12-12T17:10:07.610 回答