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