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 に答える