2

我已经阅读了很多帖子,但没有一个回答这个问题。我创建了一个填充玩家姓名列表的表格视图。当用户点击一个名称时,我希望单元格的背景颜色根据它们在循环中的位置更改为红色、黄色或绿色。我不想改变 selectionStyle 颜色。背景颜色的变化将表明每个玩家将在游戏中收到的问题的难度。这是我迄今为止一直在尝试的。当我调试时,我可以看到 didSelectRowAtIndexPath 被击中,但没有任何变化。有任何想法吗?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Player Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.backgroundColor = [UIColor greenColor];
    UILabel *playerName = (UILabel *)[cell viewWithTag:PLAYER_NAME];

    playerName.backgroundColor = [UIColor redColor];
}
4

1 回答 1

8

尝试:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    cell.backgroundColor = [UIColor greenColor];
    UILabel *playerName = (UILabel *)[cell viewWithTag:PLAYER_NAME];

    playerName.backgroundColor = [UIColor redColor];
}

这应该有效,因为您只需要一个可见的单元格。该表将返回已经可见的单元格。

您确实还需要更新数据源中的一些状态变量,因此如果此单元格滚动然后返回视图,您将知道使用正确的颜色再次绘制单元格。

于 2013-01-26T23:43:36.173 回答