我正在使用自定义backgroundView
和selectedBackgroundView
子UITableViewCell
类。这些单元格位于一个分组表中,因此我UIImageView
根据单元格在cellForRowAtIndexPath:
.
The problem I'm having is that when the cell is selected, its selectedBackgroundView
modifies the contents of the contentView
. 例如,在选择和/或突出显示一个单元格后,其中UILabel
的contentView
有其backgroundColor
变化,UIView
并且用作单元格分隔符的 不可见。
选择前: 选择后:
我没有在任何地方看到这种行为。我需要做些什么来防止这种情况发生吗?是否有不同的方法来显示我应该采取的单元格选择/突出显示来防止这种情况?
- 注意:由于它是一个分组的表格视图,我设置了不同
backgroundView
的 s 和selectedBackgroundView
s 与UIImageView
s 来解释部分中顶部和底部单元格的圆角cellForRowAtIndexPath:
,但是在使用 default 时我遇到了同样的问题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;
}
}];
}