2017-03-28 1 views
1

Ich schreibe eine Anwendung in Swift 3, die ein UITableView enthält. Ich erstelle meine Tabellenansichtszellen pragmatisch. Das Problem ist, dass der Beschriftungstext der Zelle nach der Funktion .reloadData() dauerhaft ist. Gibt es eine Funktion, um alle Elemente und Formatierungen von einer Zelle zu löschen, bevor sie benutzt wird? Ich instanziiere den UILabel via Code und kann nicht über Iterationen darauf zugreifen. Leider habe ich bereits viel Zeit in die programmatische Erstellung der Tabelle investiert. Daher möchte ich es vermeiden, zurückzugehen und möglichst eine Zellklasse zu erstellen.

Ich plane eine Funktion, so etwas zu verwenden:So löschen Sie Elemente, die programmgesteuert aus UITableViewCell erstellt wurden, bevor sie erneut verwendet werden

var label: UILabel 
       if reloadCount > 0 { 
        //clear all formatting from the cell 
       } 

        label = UILabel(frame: CGRect(x: 30, y: 0, width: self.screenWidth - 100, height: 50)) 
        label.textAlignment = .center 
        label.lineBreakMode = NSLineBreakMode.byWordWrapping 
        label.textColor = UIColor(red: 127.0/255, green: 140.0/255, blue: 142.0/255, alpha: 1.0) 
        label.font = UIFont(name: "Tahoma", size: CGFloat(22)) 
        label.numberOfLines = 0 
        label.tag = Int(self.thoughtFeed[indexPath.row].dbId!)! 
        label.text = thoughtFeed[indexPath.row].thoughtText!.fromBase64() 
        label.isUserInteractionEnabled = true 
        label.addGestureRecognizer(labelTap) 
        cell.addSubview(label) 

Vielen Dank für die Hilfe.

+0

Wie speichern Sie die Daten, die in Ihre TableView geladen werden? Zeigen Sie uns einige Ihrer 'UITableViewDataSource' Code. – toddg

+0

löschen Sie Ihr Array, –

+0

Planen Sie, diesen Code in 'CellForRowAt' auszuführen? – DonMag

Antwort

1

Sie müssen sich irgendwie an die UILabel "erinnern" und entweder wiederverwenden oder entfernen. Da Sie sagen, dass Sie keine Unterklasse UITableViewCell möchten, können Sie Tags verwenden, um einen Verweis auf Ihr Label zu erhalten. In Ihrem cellForRowAtIndexPath tun Sie etwas wie das:

if let label = cell.viewWithTag(42) as? UILabel { 
    // now you have a reference to the existing label. 
    // Just update the text (or whatever you need to do) 
} else { 
    label = UILabel(frame: CGRect(x: 30, y: 0, width: self.screenWidth - 100, height: 50)) 

    // add a tag so we can remember it when we dequeue a cell later 
    label.tag = 42 
    cell.addSubview(label)  
} 
+0

Danke für die Hilfe. Ich werde dies ein wenig ausprobieren und Sie wissen lassen, wie es funktioniert. – iamnickpitoniak

+0

@iamnickpittoniak Glück? – toddg

+0

Ja, danke für Ihre Hilfe. – iamnickpitoniak

Verwandte Themen