2017-07-03 3 views
0

Ich bin dynamisch Daten in die UICollectionView hinzufügen. Immer wenn ich neue Daten habe, löscht es alle vorhandenen Daten und lädt einen neuen Satz. Hier ist der Code,Swift - UICollectionView removeAll() löscht vorübergehend die Zellen

self.conversation.removeAll() 
self.collectionView.reloadData() 

self.conversation.insert(messageWrapper(description: "Some text", origin: "user"), at: 0) 
self.collectionView.reloadData() 

-Code in ItemAtIndexPath

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 
     let textViewCell = cell as! TextCollectionViewCell 
     let description = conversation[indexPath.row].description 
     let origin = conversation[indexPath.row].origin 

     textViewCell.textView.text = description 
     textViewCell.textView.textAlignment = origin == "arvis" ? NSTextAlignment.left : NSTextAlignment.right 
    } 

Problem Es alle vorhandenen Daten entfernt und während neue Daten geladen werden, überlappt mit dem vorhergehenden Daten dh, sagen wir mal, wenn ich Hello und während I am good hinzugefügt wird, zeigt es Hello und "Ich bin gut" darüber.

enter image description here

Warum dies geschieht?

UPDATE 1:
cellForItemAt

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let textViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "textViewCell", for: indexPath) as! TextCollectionViewCell 
     let description = conversation[indexPath.row].description 
     let origin = conversation[indexPath.row].origin 

     textViewCell.awakeFromNib() 
     textViewCell.textView.text = description 
     textViewCell.textView.textAlignment = origin == "arvis" ? NSTextAlignment.left : NSTextAlignment.right 

     return textViewCell 
    } 

TextCollectionViewCell
Identifier Klasse für die Zelle

class TextCollectionViewCell: UICollectionViewCell { 

    var textView: UITextView! 

    override func awakeFromNib() { 
     textView = UITextView(frame: contentView.frame) 
     textView.textColor = UIColor.white 
     textView.font = UIFont.systemFont(ofSize: 18) 
     textView.layer.backgroundColor = UIColor.clear.cgColor 
     textView.contentMode = .scaleAspectFill 
     textView.clipsToBounds = true 
     contentView.addSubview(textView) 
    } 
} 

Antwort

0

Die vorhandenen Daten gelöscht wird, weil Sie die Datenquelle von räumen die CollectionView und neu zu laden.

Versuchen Sie einfach, den neuen Wert an conversation Array anzuhängen und dann die CollectionView erneut zu laden.

Wenn das Problem mit overalapping ist nur versuchen, textViewCell.textView von cellForItemAtIndexPath Aktualisierung statt Aktualisierung textViewCell.textView in willDisplaycell

+0

Ja, richtig! Ich möchte alle vorhandenen Daten löschen, was gut funktioniert! Das Problem ist jedoch, dass es beim Laden neuer Daten erneut angezeigt wird. – moustacheman

+0

Könnten Sie bitte den Code für cellForItemAtIndexPath –

+0

@aravindtrue posten, anstatt 'textViewCell.textView' in' willDisplaycell' zu aktualisieren, versuchen Sie 'textViewCell.textView' von cellForItemAtIndexPath zu aktualisieren und überprüfen Sie –

0
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let textViewCell = cell as! TextCollectionViewCell 

    let description = conversation[indexPath.row].description 
     let origin = conversation[indexPath.row].origin 

     textViewCell.textView.text = description 
     textViewCell.textView.textAlignment = origin == "arvis" ? NSTextAlignment.left : NSTextAlignment.right 

    return textViewCell 
} 

versuchen, diese stattdessen in willDisplay cell: Verwendung der Aktualisierung cellForItemAt indexPath:

Verwandte Themen