Я пытаюсь создать пользовательский стиль выделения для своих ячеек таблицы, создав подкласс UITableViewCell
. Когда я нажимаю на ячейку, я хочу, чтобы она меняла цвет и возвращалась обратно к исходному цвету. Я читал другие сообщения на SO, например this one, но, похоже, он не работает.Как изменить цвет текстовых меток во время выбора UITableViewCell?
Редактировать: selectionStyle
Установлен в .None
.
Когда я использую setHighlighted(_:)
, цвет не меняется немедленно и происходит только тогда, когда кратковременное нажатие длится примерно 0,5 секунды.
Я также использовал setSelected(_:)
. Цвет сразу меняется, но не изменится. Поэтому я добавил deselectRowAtIndexPath(_:)
в tableView(didSelectRowAtIndexPath:)
, но это не вызывает никаких изменений. Затем я попытался использовать tableView.reloadRowsAtIndexPaths(_:)
и, наконец, цвет меняется и возвращается к исходному цвету. Но, к сожалению, он не оживляет последнюю часть, а затем возвращается к исходному цвету. Также я заметил, что после изменения цвета он также уменьшает исходный цвет (вызванный tableView.reloadRowsAtIndexPaths(_:)
).
Я отказался от использования setSelected(_:)
и setHighlighted(_:)
и попытался использовать touchesBegan(_:)
и touchesEnded(_:)
. Короче говоря, такие же, как указано выше ...
Это коды, которые я пробовал использовать (не все вместе).
В подклассе UITableViewCell
:
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
label.textColor = selected ? UIColor.redColor() : UIColor.blackColor()
}
override func setHighlighted(highlighted: Bool, animated: Bool) {
label.textColor = highlighted ? UIColor.redColor() : UIColor.blackColor()
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesBegan(touches, withEvent: event)
label.textColor = UIColor.redColor()
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesEnded(touches, withEvent: event)
let changeEnded = CATransition()
changeEnded.duration = 0.5
nameLabel.layer.addAnimation(changeEnded, forKey: nil)
nameLabel.textColor = .blackColor()
}
В контроллере табличного (не вместе ни):
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
tableView.deselectRowAtIndexPath(indexPath, animated: true)