2016-08-10 101 views
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()

+2

單元對象被重用。在'cellForRowAtIndexPath'中添加子視圖是一個壞主意,因爲當單元對象被重用時,以前添加的子視圖仍然存在。您需要確保刪除以前添加的子視圖,或者更好地在您的單元格原型中添加聊天氣泡視圖,並將其數據設置爲'cellForRowAtIndexPath',這樣您就不需要每次都添加子視圖。 – Paulw11

+0

@ Paulw11好的我相信我明白你的意思。我繼續把我的邏輯放到我的原型單元格類中 - 如果你可以看看它,並提出一種如何在不使用addSubView的情況下附加視圖的方法,那將是非常棒的。感謝您的幫助! – Fernando

+0

我相信paul建議你將'ChatBubble'的一個實例添加爲'UITableViewCell'子類的屬性,並在表視圖單元格的生命週期的早期將其作爲子視圖添加,或許在'awakeFromNib'中添加或者添加到故事板中。然後只需更新'cellForRowAtIndexPath'中顯示的數據'ChatBubble'。 – beyowulf

回答

0

一個棘手的方法是在細胞INITING添加子視圖,只是設置isHidden屬性子視圖中cellForRowAtIndexPath。你可能會得到你想要的。

相關問題