2016-07-06 9 views
1

これはよくある問題だと私は研究しましたが、問題を見つけることができませんでした。色を変えるiOSセルの再利用

マイコード:

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)) 
    } 

} 

私は私のコードを説明してみましょう:あなたは​​がtrueの場合、セルは、左側にあるべきsetCellで見ることができるように。 falseの場合、セルは右側になければなりません。 これは問題なく動作しています。ご覧のとおり、もう1つのif文があります。 message.isSent == 1の場合、imageプロパティがbubbleImageViewに変更されており、ここから問題が始まります。 bubbleImage.outgoingは青色の画像で、bubbleImage.notYetSentは赤色の画像です。スクロールを開始すると、セルの色が変化していても、isSentの値は変化しません。

私は最初のif文(​​チェック。)に問題はありませんが、すべてが素晴らしいように見えますが、色は変化しています。どうすればこの問題を解決できますか?

例:スクロール前

:スクロール後

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

'tag'のように見えるのは、現在のセルがどのように設定されているかを調べることを目的としたもので、既に設定されている場合はセルを再設定する必要はありません。しかし、そうであれば、 'tag'はセルのプロパティであり、セルに保存されるべきです。それが私を混乱させていたのです。 – vacawama

関連する問題