カスタムbackgroundView
とサブクラスselectedBackgroundView
を使用しています。これらのセルはグループ化されたテーブルにあるため、のセルの行に基づいてUITableViewCell
、背景と選択した背景をsとして設定しています。UIImageView
cellForRowAtIndexPath:
私が抱えている問題は、セルが選択されると、セルselectedBackgroundView
の内容が変更されることcontentView
です。たとえば、セルを選択および/または強調表示した後、UILabel
のcontentView
はbackgroundColor
変更UIView
され、セルの区切り文字として使用されていることは表示されません。
選択前:選択
後:
この動作がどこにも文書化されていません。これを防ぐために私がしなければならないことがありますか?これを防ぐために、セルの選択/強調表示を表示するための別のアプローチはありますか?
- 注:これはグループ化されたテーブルビューであるため、のセクションの上部セルと下部セルの丸みを帯びた角を考慮して、異なる
backgroundView
sとselectedBackgroundView
sをsに設定しましたが、デフォルトを使用した場合も同じ問題が発生します。UIImageView
cellForRowAtIndexPath:
UITableViewSelectionStyleBlue
編集1:
an0の答えごとに、私は上書きしsetHighlighted:animated:
ました。実装の信頼性はわかりませんが、このアプローチはサブビューのプロパティhighlighted
とプロパティを維持するために機能しました。backgroundColor
NSArray *recursiveAllSubviews = [self recursiveValueForKey:@"subviews"]; // Uses MTRecursiveKVC Cocoapod
NSArray *backgroundColors = [recursiveAllSubviews valueForKey:@"backgroundColor"];
[super setHighlighted:highlighted animated:animated];
if (highlighted) {
[recursiveAllSubviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger index, BOOL *stop){
if ([view respondsToSelector:@selector(setHighlighted:)]) {
[view setValue:[NSNumber numberWithBool:NO] forKey:@"highlighted"];
}
id possiblyNull = [backgroundColors objectAtIndex:index];
if (possiblyNull != [NSNull null]) {
view.backgroundColor = possiblyNull;
}
}];
}