これはよくある問題だと私は研究しましたが、問題を見つけることができませんでした。色を変える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文(チェック。)に問題はありませんが、すべてが素晴らしいように見えますが、色は変化しています。どうすればこの問題を解決できますか?
例:スクロール前
:スクロール後
:
まあ、私はmessage.incoming!=(tag == incomingTag){それがうまくいけば削除しました。私の時間... :)ありがとう –
'tag'のように見えるのは、現在のセルがどのように設定されているかを調べることを目的としたもので、既に設定されている場合はセルを再設定する必要はありません。しかし、そうであれば、 'tag'はセルのプロパティであり、セルに保存されるべきです。それが私を混乱させていたのです。 – vacawama