0
我有一個問題,如果我的表格視圖向下滾動足夠,它會重複表格視圖中的第一個元素。我真的不知道爲什麼這樣做,我唯一的猜測是,我需要以某種方式閱讀,如果該單元格以前存在,但在我看到的教程中,他們並不真的有這個問題。當實現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 「,它是類型的UIView到細胞而不cellForRowAtIndexPath方法中使用addSubview()
單元對象被重用。在'cellForRowAtIndexPath'中添加子視圖是一個壞主意,因爲當單元對象被重用時,以前添加的子視圖仍然存在。您需要確保刪除以前添加的子視圖,或者更好地在您的單元格原型中添加聊天氣泡視圖,並將其數據設置爲'cellForRowAtIndexPath',這樣您就不需要每次都添加子視圖。 – Paulw11
@ Paulw11好的我相信我明白你的意思。我繼續把我的邏輯放到我的原型單元格類中 - 如果你可以看看它,並提出一種如何在不使用addSubView的情況下附加視圖的方法,那將是非常棒的。感謝您的幫助! – Fernando
我相信paul建議你將'ChatBubble'的一個實例添加爲'UITableViewCell'子類的屬性,並在表視圖單元格的生命週期的早期將其作爲子視圖添加,或許在'awakeFromNib'中添加或者添加到故事板中。然後只需更新'cellForRowAtIndexPath'中顯示的數據'ChatBubble'。 – beyowulf