2014-01-21 6 views
0

Я меняю цвет ячейки при щелчке, а также меняю небольшой пользовательский разделитель в нижней части ячейки. Однако, когда я звоню deselectRowAtIndexPath, цвет разделителя восстанавливается до цвета, который он имел до игнорирования моего изменения. Почему это происходит, как я могу выполнить эту простую задачу? Вот мой код:Невозможно изменить цвет разделителя (пользовательский UIView) при выборе в UITableView

[tableView deselectRowAtIndexPath:indexPath animated:NO]; 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
UIView *separator = [cell viewWithTag:SEPARATOR]; 
separator.backgroundColor = _colorOrangeSelected; 

ответ

1

Я решил эту проблему путем создания подклассов UITableViewCell для моих клеток и первостепенную setSelected и setHighlighted методы. Я предполагаю, что встроенные реализации просто путаются с subviews и их фоном странным образом, который игнорирует их последнее состояние.

1

Вот решение:

  • Перетащите UIImageView в камеру и сделать его сепаратор. установите image и HightLightImage с двумя разными изображениями.

При выборе ячейки ваша пользовательская ячейка автоматически обновит состояние subviews, но вам нужно подготовить два изображения.

1

У UIView не может быть выделенного цвета. Вы можете попробовать следующее решение: 1. Использование UIButton или UIImageView, которые можно установить highlightedColor или highlightedImage 2. Использование DrawRect:

- (void)drawRect:(CGRect)rect { 
    [super drawRect:rect]; 
    if (self.cellDevideLineColor != nil) { 
     CGContextRef context = UIGraphicsGetCurrentContext(); 

     [self.cellDevideLineColor set]; 
     CGContextSetLineWidth(context, kCellLineHeight); 

     CGContextMoveToPoint(context, 0, rect.size.height); 
     CGContextAddLineToPoint(context, self.width, rect.size.height); 
     CGContextStrokePath(context); 
    } 
} 
Смежные вопросы