Ответ 1
Отличный ресурс по настройке UITableViews был этот пост Мэтта Галлахера. То, что вы хотите сделать, - установить выбранныйBackgroundView в новое представление (вместо nil), которое является либо прозрачным, либо UIImageView.
У меня есть пользовательский подкласс UITableViewCell
. Я установил contentView
моего подкласса ячейки
пользовательский класс UIView
, в котором я переопределяю -drawRect:
и выполняю все чертежи.
Кроме того, я устанавливаю cell.contentView.opaque = NO
для достижения прозрачности в определенных областях ячейки (к сожалению, обратное изображение за столом должно показывать через каждую ячейку в определенных частях, чтобы добиться стилистического эффекта. Я знаю, что это производительность должна быть такой).
Проблема. Я по-прежнему вижу фоновый цвет синего градиента по умолчанию, который рисуется за моей ячейкой (в прозрачных областях), когда он выбран или подсвечен (нажат). Это заслоняет изображение за столом, что плохо.
Цель. Чтобы предотвратить появление синего градиентного фона, но все же сможете проверить свойства cell.isSelected
и cell.isHighlighted
в пределах -[MyContentView drawRect:]
, чтобы определить, как рисовать мой собственный пользовательский выбор/выделение.
Что я пробовал:
cell.selectionStyle = UITableViewCellSelectionStyleNone
имеет желаемый эффект, предотвращающий фоновый фон выбора синего градиента, но также предотвращает правильную установку свойств cell.isSelected
и cell.isHighlighted
, что означает, что я не могу выполнить свой собственный выбор/выделить рисунок
cell.selectionBackgroundView = nil
и cell.backgroundView = nil
в методе cell -init
или -prepareForReuse
не препятствует фону выбора синего градиента
настройка cell.selectionBackgroundView = nil
в методе -[MyContentView -drawRect:]
имеет желаемый эффект предотвращения фона выбора синего градиента, но это кажется очень janky
overriding - [UITableViewCell setSelected: анимированный:] - не-op. это не имеет желаемого эффекта предотвращения фона выбора синего градиента.
Отличный ресурс по настройке UITableViews был этот пост Мэтта Галлахера. То, что вы хотите сделать, - установить выбранныйBackgroundView в новое представление (вместо nil), которое является либо прозрачным, либо UIImageView.
Вы также должны переопределить setHighlighted: для предотвращения показов синего градиента. Если вы просто переопределите setHighlighted: тогда вы получите мгновенный эффект выбора.
поэтому у вас будут следующие два метода:
- (void)setHighlighted: (BOOL)highlighted animated: (BOOL)animated
{
// don't highlight
}
- (void)setSelected: (BOOL)selected animated: (BOOL)animated
{
// don't select
//[super setSelected:selected animated:animated];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
На сегодняшний день проще всего, на мой взгляд, добиться этого, установив флажок "Атрибуты таблицы" на экране "Интерфейс", где он говорит "Показать выбор при касании". Смотрите скриншот ниже:
То, что сработало для меня в прошлом, просто помещает:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated { }
В моих подклассах UITableViewCell (потому что он не вызовет супер и сделает сам выделенный). Надеюсь, это то, что вы искали.
Как насчет этого?
// disable user interaction
cell.userInteractionEnabled = NO;