web-dev-qa-db-ja.com

UITableViewCellの選択された行のテキストの色の変更

私はテーブルビューを持っていますが、選択した行のテキストの色をどのように変更できますか?私はこのコードで試しました:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell= [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];

    cell.text = [localArray objectAtIndex:indexPath.row];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    cityName = [localArray objectAtIndex:indexPath.row];

    UITableViewCell* theCell = [tableView cellForRowAtIndexPath:indexPath];
    theCell.textColor = [UIColor redColor];
    //theCell.textLabel.textColor = [UIColor redColor];

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

(1)行を選択すると、テキストの色が赤に変わりますが、別の行を選択すると、以前に選択した行のテキストは赤のままです。どうすればこれを解決できますか?

(2)テーブルのテキストの色をスクロールして黒い色に変更すると、これを解決する方法は?

ありがとう。

61
Maulik

tableView:cellForRowAtIndexPath:でこれを行います:

cell.textLabel.highlightedTextColor = [UIColor redColor];

(そしてもうcell.text = ...を使用しないでください。これはほぼ2年間廃止されています。代わりにcell.textLabel.text = ...を使用してください。)


Raphael Oliveira コメントで言及されているように、セルのselectionStyleがUITableViewCellSelectionStyleNoneに等しい場合、これは機能しません。選択スタイルについては、ストーリーボードも確認してください。

202
Ole Begemann

セルの背景色を変更せずに、テキストの色のみを変更する場合。これを使用できます。cellForRowAtIndexPathメソッドでこのコードを記述します。

UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = selectionColor;
cell.textLabel.highlightedTextColor = [UIColor redColor];
4
Rinku

私は同じ問題を抱えていました、これを試してください!

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    for (id object in cell.superview.subviews) {
        if ([object isKindOfClass:[UITableViewCell class]]) {
            UITableViewCell *cellNotSelected = (UITableViewCell*)object;
            cellNotSelected.textLabel.textColor = [UIColor blackColor];
        }
    }

    cell.textLabel.textColor = [UIColor redColor];

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

それがあなたの(そして私の)問題の解決策かもしれません。

1

すでにUITableViewCellをサブクラス化している場合は、awakeFromNibメソッドで色を設定する方が簡単です(ストーリーボードまたはxibからインスタンス化することを想定しています)。

@implementation MySubclassTableViewCell

- (void)awakeFromNib {
    [super awakeFromNib];
    self.selectedBackgroundView = [[UIView alloc] initWithFrame:self.frame];
    self.selectedBackgroundView.backgroundColor = [UIColor colorWithRed:0.1 green:0.308 blue:0.173 alpha:0.6];
    self.customLabel.highlightedTextColor = [UIColor whiteColor];
}

@end
0
mikeho