2016-07-06 2 views
1

Я знаю, что это распространенная проблема, я исследовал, но я не мог найти проблему.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 отлично смотрится, но цвета меняются. Как я могу решить эту проблему?

Пример:

Перед Свиток:

enter image description here

После Свиток:

enter image description here

ответ

1

Я немного неясно, о том, как вы используете tag, но эта линия:

if message.incoming != (tag == incomingTag) { 

помешает вам достичь этого кода:

 if message.isSent == 1 { 
      bubbleImageView.image = bubbleImage.outgoing 
     } 
     if message.isSent == 0 { 
      bubbleImageView.image = bubbleImage.notYetSent 
     } 

в случае повторного использования клеток. Этот код необходимо запускать каждый раз, когда вы настраиваете ячейку, и эта ячейка является исходящим сообщением. Рассмотрите возможность перемещения этой части установки за пределы первого условия:

if message.incoming != (tag == incomingTag) { 
    // setup code 

} 

if !message.incoming { 
    if message.isSent == 1 { 
     bubbleImageView.image = bubbleImage.outgoing 
    } 
    if message.isSent == 0 { 
     bubbleImageView.image = bubbleImage.notYetSent 
    } 
} 
+0

Хорошо .. Я удалился, если message.incoming! = (Tag == incomingTag) {тогда он работал хорошо. Мои часы ... :) Спасибо –

+1

Это похоже на «тег», предназначенный для проверки того, как настроена текущая ячейка, и если она уже настроена так, как вы этого хотите, тогда вам не нужно перенастраивать ячейку. Но если это так, то «тег» должен быть свойством ячейки и сохранен с ячейкой. Вот что меня смутило. – vacawama