Я использую пользовательские backgroundView
и selectedBackgroundView
для подкласса UITableViewCell
. Эти ячейки находятся в сгруппированной таблице, поэтому я устанавливаю фон и выбираю фон как UIImageView
s на основе строки ячейки в cellForRowAtIndexPath:
.
У меня проблема в том, что когда ячейка выбрана, ее selectedBackgroundView
изменяет содержимое contentView
. Например, после выбора и/или выделения ячейки UILabel
в contentView
изменяется на backgroundColor
, а UIView
, используемый в качестве разделителя ячеек, не виден.
Перед выбором: После выбора:
Я нигде не вижу, чтобы это поведение было задокументировано. Есть ли что-то, что мне нужно сделать, чтобы предотвратить это? Есть ли другой подход к отображению выбора/выделения ячеек, который я должен использовать, чтобы предотвратить это?
- Примечание. Поскольку это сгруппированное табличное представление, я установил разные
backgroundView
s иselectedBackgroundView
s сUIImageView
s, чтобы учесть закругленные углы в верхней и нижней ячейках в разделе в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;
}
}];
}