Вам придется немного пройти уровень абстракции, чтобы выяснить причину. Инструкции сравнения / перехода в x86 являются двоичными (так как они могут быть легко вычислены за несколько тактов), и так оно и было.
Если хотите, многие языки предлагают абстракцию для этого. В PHP, например, вы можете использовать:
$isPrimaryColor = in_array($someColor, array('Red', 'White', 'Blue'));
Отличным ресурсом по настройке UITableViews был этот пост Мэтта Галлахера. Что вам нужно сделать, так это установить для selectedBackgroundView новое представление (вместо nil), которое является либо прозрачным, либо UIImageView.
То, что у меня работало в прошлом, - это просто поместить:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated { }
в мои подклассы UITableViewCell (потому что он не вызывает super и не выделяет себя). Надеюсь, это то, что вы искали.
Вы также должны переопределить 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;
Как насчет этого?
// disable user interaction
cell.userInteractionEnabled = NO;