Когда я нажимаю на свою UITableViewCell
, фоновая часть (области, которые не покрывает мое фоновое изображение) становится синей, когда я нажимаю на ячейку. Кроме того, все UILabel
символы в ячейке становятся белыми, когда по ней щелкают, чего я и хочу.
Однако мне не нужен синий фон, когда я щелкаю по нему, но если я это сделаю selectionstylenone
, я потеряю выделенные цвета для UILabel
s в ячейке.
Так есть ли способ просто избавиться от синего фона при щелчке по ячейке, но сохранить выделенные цвета UILabel
s?
ios
objective-c
uitableview
click
selection
SimplyKiwi
источник
источник
Ответы:
Сделать это можно следующим образом. Установите стиль выделения ячейки таблицы на
UITableViewCellSelectionStyleNone
. Это уберет выделение синего фона. Затем, чтобы подсветка текстовой метки работала так, как вы хотите, вместо использования класса UITableViewCell по умолчанию создайте подклассUITableViewCell
и переопределите реализацию по умолчаниюsetHighlighted:animated
с вашей собственной реализацией, которая устанавливает цвета метки, как вы хотите, в зависимости от выделенного состояния .- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { if (highlighted) { self.textLabel.textColor = [UIColor whiteColor]; } else { self.textLabel.textColor = [UIColor blackColor]; } }
источник
setHighlighted:animated:
, который принимаетanimated
параметр. ПереопределениеsetHighlighted:
метода с одним параметром не сработает.[super setHighlighted:highlighted animated:animated];
?setHighlighted
иsetSelected
. Сначала вы выбираете ячейку, ок, меняете textColor на белый, затем вы прокручиваете эту ячейку за пределы визуальной части экрана, затем прокручиваете назад, видите, textColor становится чернымЕсли вы работаете до iOS7, отключите стиль выделения ячеек.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
В противном случае оставьте это
UITableViewCellSelectionStyleDefault
Потом:
UIView *selectedView = [[UIView alloc]init]; selectedView.backgroundColor = [UIColor redColor]; cell.selectedBackgroundView = selectedView;
Этот код будет работать правильно
источник
Вы можете использовать следующие методы делегата после установки стиля выбора на none:
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
Реализуйте свой код здесь, например
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath]; [cell.lbls setTextColor:[UIColor whiteColor]]; return indexPath; }
источник
Чтобы выполнить эту работу, вы должны установить стиль выделения,
UITableViewCellSelectionStyleNone
а затем переопределить метод,setSelected:animated:
чтобы получить желаемый результат. Он делает то же самое, что и механизм автоматического выбора iOS, когда вы видите синий (или серый) выбор.- (void)setSelected:(BOOL)selected animated:(BOOL)animated { if (selected) { self.textLabel.textColor = [UIColor whiteColor]; } else { self.textLabel.textColor = [UIColor blackColor]; } }
Вы также можете настроить это другим способом, например, изменив фон UITableViewCell и т. Д.
источник
В cellForRowAtIndexPath используйте этот код:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; [cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels
Надеюсь, это сработает для вас.
Наслаждайтесь кодированием :)
источник
Переопределение следующих функций в вашем подклассе
UITableViewCell
.источник
Чтобы соответствовать стандартному поведению стиля выбора, вам нужно переопределить оба
setHighlighted:animated:
иsetSelected:animated:
. Вы, вероятно, захотите переместить этот код в общий метод, чтобы избежать дублирования кода.override func setHighlighted(highlighted: Bool, animated: Bool) { setAsSelectedOrHighlighted(highlighted, animated: animated) super.setHighlighted(highlighted, animated: animated) } override func setSelected(selected: Bool, animated: Bool) { setAsSelectedOrHighlighted(selected, animated: animated) super.setSelected(selected, animated: animated) } func setAsSelectedOrHighlighted(selectedOrHighlighted: Bool, animated: Bool) { let action = { // Set animatable properties } if animated { UIView.animateWithDuration(1.0, delay: 0, options: .CurveEaseInOut, animations: action, completion: nil) } else { action() } }
источник
В пользовательской ячейке переопределите реализацию по умолчанию awakeFromNib & setSelected:
- (void)awakeFromNib { // Initialization code UIImageView * imageView = [[UIImageView alloc] initWithFrame:self.bounds]; imageView.image = [UIImage imageNamed:@"cell_selected_img"]; self.selectedBackgroundView = imageView; } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state if (selected) { self.lblCustomText.textColor = [UIColor whiteColor]; } else { self.lblCustomText.textColor = [UIColor blackColor]; } }
Кроме того , убедитесь , что стиль выбора будет НЕ установлен в None .
источник
Единственный способ заставить его работать - это:
- (void)awakeFromNib { UIView *bgColorView = [[UIView alloc] init]; bgColorView.backgroundColor = [UIColor colorWithRed:(55.0/255.0) green:(163.0/255.0) blue:(237.0/255.0) alpha:1.0]; bgColorView.layer.masksToBounds = YES; self.selectedBackgroundView = bgColorView; }
источник
Также вы можете использовать contentView.alpha. Вот пример.
Сначала установите стиль выделения для своей ячейки:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
Затем в пользовательском классе ячейки переопределите этот метод с помощью примера анимации:
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { [super setHighlighted:highlighted animated:animated]; if (highlighted) { [UIView animateWithDuration:0.15f animations:^{ self.contentView.alpha = 0.5f; }]; } else { [UIView animateWithDuration:0.35f animations:^{ self.contentView.alpha = 1.f; }]; } }
источник