Я знаю, что это распространенная проблема, я исследовал, но я не мог найти проблему.iOS Cell Reusing Изменение цвета
Мой код:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let row = indexPath.row
let cell1=tableView.dequeueReusableCellWithIdentifier(textCellIdentifier) as! MessageCell
cell1.setCell(swiftBlogs[row])
return cell1
}
MessageCell.swift
func setCell(message:Message) {
messageLabel.text = message.text
if message.incoming != (tag == incomingTag) {
var layoutAttribute: NSLayoutAttribute
var layoutConstant: CGFloat
if message.incoming {
tag = incomingTag
bubbleImageView.image = bubbleImage.incoming
bubbleImageView.highlightedImage = bubbleImage.incomingHighlighed
messageLabel.textColor = UIColor.blackColor()
layoutAttribute = .Left
layoutConstant = 10
} else { // outgoing
tag = outgoingTag
if message.isSent == 1 {
bubbleImageView.image = bubbleImage.outgoing
}
if message.isSent == 0 {
bubbleImageView.image = bubbleImage.notYetSent
}
bubbleImageView.highlightedImage = bubbleImage.outgoingHighlighed
messageLabel.textColor = UIColor.whiteColor()
layoutAttribute = .Right
layoutConstant = -10
}
let constraints: NSArray = contentView.constraints
let indexOfConstraint = constraints.indexOfObjectPassingTest { (constraint, idx, stop) in
return (constraint.firstItem as! UIView).tag == bubbleTag && (constraint.firstAttribute == NSLayoutAttribute.Left || constraint.firstAttribute == NSLayoutAttribute.Right)
}
contentView.removeConstraint(constraints[indexOfConstraint] as! NSLayoutConstraint)
contentView.addConstraint(NSLayoutConstraint(item: bubbleImageView, attribute: layoutAttribute, relatedBy: .Equal, toItem: contentView, attribute: layoutAttribute, multiplier: 1, constant: layoutConstant))
}
}
Позвольте мне объяснить мой код: Как вы можете видеть в setCell
Если message.incoming
верно, то ячейка должна быть на левой стороне. Если false, ячейка должна быть с правой стороны. Это работает без проблем. Но, как вы можете видеть, у меня есть еще одно утверждение if. Если message.isSent
== 1, то я меняю image
свойство bubbleImageView
, и моя проблема начинается здесь. bubbleImage.outgoing
- синее изображение и bubbleImage.notYetSent
- красное изображение. Когда я начинаю прокручивать цвета ячеек, меняется даже значение isSent
не меняется.
У меня нет проблем с первым утверждением if (message.incoming
check.) Everythings отлично смотрится, но цвета меняются. Как я могу решить эту проблему?
Пример:
Перед Свиток:
После Свиток:
Хорошо .. Я удалился, если message.incoming! = (Tag == incomingTag) {тогда он работал хорошо. Мои часы ... :) Спасибо –
Это похоже на «тег», предназначенный для проверки того, как настроена текущая ячейка, и если она уже настроена так, как вы этого хотите, тогда вам не нужно перенастраивать ячейку. Но если это так, то «тег» должен быть свойством ячейки и сохранен с ячейкой. Вот что меня смутило. – vacawama