30

アクセサリ ビューを UITableViewCell に追加するたびに、背景色が引き継がれませんか? UISwitch を accessoriesView として設定しています。cell.backgroundColor プロパティに設定した色は、accessoryView ではなく contentView にのみ影響します。それらを同じ値に設定するためにすべてを試しました。cell.backgroundView.backgroundColor および cell.accessoryView.backgroundColor プロパティを希望の色に設定しようとしましたが、何も機能していません。また、contentView 内にサブビューを作成してみました。これにより、backgroundColor の問題が解決されました (回避することで) が、テキストが長すぎると、スイッチが cell.textLabel の上に配置されるという問題が発生します。

contentView でサブビューを作成せずに accessoriesView の背景色を変更したり、UITableViewCell をサブクラス化せずに cell.textLabel の長さを変更したりする方法はありますか?

4

5 に答える 5

69

ドキュメント (斬新なアイデア) を読んだところ、「A Closer Look at Table-View Cells」という記事を見つけました。細胞の構成を理解するのに役立ち、答えを見つけました...

細胞はこんな感じ…

代替テキスト

cell.accessoryView は cell.contentView の姉妹ビューであるため、cell.contentView にそのスーパービューを要求する必要があり、両方のビューの背景色を一度に変更することができました。コードは次のようになります...

// Cell Formatting
cell.contentView.superview.backgroundColor = [UIColor greenColor];

それが本当に簡単であることは知っていますが、私は初心者であり、速度を落としてドキュメントを読むのに何年もかかりました. うまくいけば、これはそこにいる他の人々を助けるでしょう!

于 2010-08-14T18:20:47.283 に答える
46
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = [UIColor yellowColor];
}
于 2011-05-07T14:49:59.777 に答える
15
 UIView *myView = [[UIView alloc] initWithFrame:cell.frame];
 myView.backgroundColor = [UIColor colorWithRed:214.00/255.00 green:233.00/255.00 blue:247.00/255.00 alpha:1.0];
 cell.backgroundView = myView;
 [myView release];
于 2011-09-30T06:26:16.110 に答える
3

アクセサリ ビューの背景色をセルの背景色とブレンドする場合、iOS8 と Swift では、これは tableView(_, cellForRowAtIndexPath:) メソッドの魅力のように機能しました。

let color = cell.contentView.backgroundColor
cell.backgroundColor = color
于 2015-03-27T04:06:37.733 に答える
1

@Zak、まず、セルレイアウトの詳細に注意を向けてくれてありがとう。非常に役立ちます!
次のコードを指摘したいと思います。

self.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"cell_background.png"]];

私のために働いた。その結果、セル全体に広がる背景画像が得られました。AccessoriesTypeViewはそれをカバーしませんでした! 重要な部分は、このコードをカスタム セル クラスのlayoutSubviewsメソッドに配置し、TableViewController クラスにあるcellForRowAtIndexPathに配置しないことです。私の場合、クラス CustomCell を定義し、その中にラベル、画像ビューなどを定義しました。

注:次のコードは機能しませんでした:

cell.contentView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"cell_background.png"]];

tableView:(UITableView *)tableView cellForRowAtIndexPatメソッド内に配置した場合。セルを覆う背景が表示されていましたが、AccessoryTypeView がその上にありました...

于 2011-03-04T13:19:02.927 に答える