11

UITableViewCell は、初期化後に UILabel を唯一のサブビューとして「事前に構築」されています。上記のラベルの背景色を変更したいのですが、をしても色が変わりません。問題のコード:

UILabel* label = (UILabel*)[cell.contentView.subviews objectAtIndex:0];
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor darkGrayColor];
label.opaque = YES;
4

4 に答える 4

8

あなたのコードスニペットは私にとってはうまく機能しますが、セルがテーブルに追加されて表示された後に行う必要があります。から呼び出された場合、サブビューがまだ作成されていないinitWithFrame:reuseIdentifier:ため、例外が発生します。UILabel

おそらく最良の解決策はUILabel、組み込みパスへのこの (非常に厄介な) パスに依存するのではなく、標準に合わせて構成された独自の を追加することです。

于 2008-10-21T17:13:01.280 に答える
5

UITableViewCell がそのラベル backgroundColors を layoutSubviews メソッドで設定するため、これは機能しません。

組み込みの textLabel または detailTextLabel の色を変更する場合は、UITableViewCell をサブクラス化し、layoutSubviews をオーバーライドします。スーパー実装を呼び出してから、backgroundColor プロパティを必要なものに変更します。

- (void) layoutSubviews
{   
     [super layoutSubviews];

     self.textLabel.backgroundColor = [UIColor redColor];
}
于 2010-11-07T20:48:34.293 に答える
2

組み込みのセルの抽出に頼るのではなく、セルを割り当てるときに独自のラベルを contentView に追加します。次に、すべての値を制御できます。

UILabel* label = [[[UILabel alloc] init] autorelease];
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor darkGrayColor];
label.opaque = YES;
[cell.contentView addSubview:label];
于 2008-10-21T20:43:01.400 に答える
0
for (UIView *views in views.subviews)
{
    UILabel* temp = (UILabel*)[views.subviews objectAtIndex:0];
    temp.textColor = [UIColor whiteColor];        
    temp.shadowColor = [UIColor blackColor];
    temp.shadowOffset = CGSizeMake(0.0f, -1.0f);
} 
于 2012-09-06T10:59:40.053 に答える