2016-08-10 7 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を添付するかどうかはわかりませんということです"cellForRowAtIndexPathメソッドでaddSubview()を使用せずにセルにUIView型のもの

+2

セルオブジェクトが再利用されます。 'cellForRowAtIndexPath'にサブビューを追加するのは悪い考えです。なぜなら、セルオブジェクトが再利用されるとき、以前に追加されたサブビューはまだそこに残っているからです。以前に追加したサブビューを削除したり、セルプロトタイプでチャットバブルビューを追加したり、そのデータを 'cellForRowAtIndexPath'に設定して、毎回サブビューを追加する必要がないようにする必要があります。 – Paulw11

+0

@ Paulw11私はあなたが言っているものを得ると信じています。私は先に進んで、私のロジックをプロトタイプのセルクラスに入れました。もしあなたがそれを見て、addSubViewを使わずにビューをどのようにアタッチできるかを示せばいいでしょう。ご協力ありがとうございました! – Fernando

+0

私はあなたの 'UITableViewCell'サブクラスのプロパティとして' ChatBubble'のインスタンスを追加し、それをあなたのテーブルビューのセルのライフサイクルの早い段階で、おそらく 'awakeFromNib'に追加するか、あなたのストーリーボードに追加することをお勧めします。次に、 'cellForRowAtIndexPath'のデータ' ChatBubble'を更新するだけです。 – beyowulf

答えて

0

セル初期化でサブビューを追加し、のサブビューのプロパティをに設定するだけです。あなたはあなたが望むものを得るかもしれません。

関連する問題