テーブルビューが十分にスクロールして、テーブルビューにあった最初の要素が繰り返される問題があります。私は正直なところ、そのことをやっているのか分からないのですが、私の唯一の推測は、そのセルが以前に存在していれば何とか読む必要がありますが、私が見たチュートリアルでは、 cellForRowAtIndexパスメソッドを実装するときは、それは動作し、セルは繰り返されません。TableViewセルが再び表示されています
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier = "chatbubbleCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! ChatBubbleCell
/* Configure the cell */
var yAxis: CGFloat = 5.0
// Setup the chat bubble view
if outgoingSender {
let outgoingChatBubbleData = ChatBubbleData(text: messagesArray[indexPath.row], image: nil, profileImage: UIImage(named: "chatIcon"), date: NSDate(), type: .Mine)
let outgoingChatBubble = ChatBubble(data: outgoingChatBubbleData, startY: yAxis)
cell.contentView.addSubview(outgoingChatBubble)
} else {
let incomingChatBubbleData = ChatBubbleData(text: messagesArray[indexPath.row], image: nil, profileImage: UIImage(named: "chatIcon"), date: NSDate(), type: .Opponent)
var incomingChatBubble = ChatBubble(data: incomingChatBubbleData, startY: yAxis)
cell.contentView.addSubview(incomingChatBubble)
}
return cell
}
あなたは私がやっているすべてのメッセージの着信、発信または着信であるかどうかをチェックして、ちょうどラベルを含むカスタムビューを初期化して見ることができ、その後、私はちょうどのコンテンツビューに追加すると細胞。
ご協力いただきありがとうございます、ありがとうございます。
- セルが再利用されているということを下のポールから聞いたので、同じ理由を示しています。だから私は
let outgoingChatBubbleData = ChatBubbleData(text: "", image: nil, profileImage: UIImage(named: "chatIcon"), date: NSDate(), type: .Mine)
let incomingChatBubbleData = ChatBubbleData(text: "", image: nil, profileImage: UIImage(named: "chatIcon"), date: NSDate(), type: .Opponent)
を示したように、私のプロトタイプのセルクラスに私の細胞ロジックを配置し、cellForRowAtIndexPath
にif outgoingSender {
cell.outgoingChatBubbleData.text = messagesArray[indexPath.row]
var incomingChatBubble = ChatBubble(data: cell.outgoingChatBubbleData, startY: yAxis)
// Attach to bubble view?
} else {
cell.incomingChatBubbleData.text = messagesArray[indexPath.row]
let outgoingChatBubble = ChatBubble(data: cell.incomingChatBubbleData, startY: yAxis)
// Attach to bubble view?
}
をそのプロパティを設定しかし、今私の問題は、私は「ChatBubbleを添付するかどうかはわかりませんということです"cellForRowAtIndexPathメソッドでaddSubview()を使用せずにセルにUIView型のもの
セルオブジェクトが再利用されます。 'cellForRowAtIndexPath'にサブビューを追加するのは悪い考えです。なぜなら、セルオブジェクトが再利用されるとき、以前に追加されたサブビューはまだそこに残っているからです。以前に追加したサブビューを削除したり、セルプロトタイプでチャットバブルビューを追加したり、そのデータを 'cellForRowAtIndexPath'に設定して、毎回サブビューを追加する必要がないようにする必要があります。 – Paulw11
@ Paulw11私はあなたが言っているものを得ると信じています。私は先に進んで、私のロジックをプロトタイプのセルクラスに入れました。もしあなたがそれを見て、addSubViewを使わずにビューをどのようにアタッチできるかを示せばいいでしょう。ご協力ありがとうございました! – Fernando
私はあなたの 'UITableViewCell'サブクラスのプロパティとして' ChatBubble'のインスタンスを追加し、それをあなたのテーブルビューのセルのライフサイクルの早い段階で、おそらく 'awakeFromNib'に追加するか、あなたのストーリーボードに追加することをお勧めします。次に、 'cellForRowAtIndexPath'のデータ' ChatBubble'を更新するだけです。 – beyowulf