2016-05-12 22 views
0

Ich füge einen Satz Beschriftungen basierend auf dem Inhalt eines Arrays auf dem Bildschirm hinzu. Nun, wenn ich das Array modifiziere, was ist der beste Weg, um die Etiketten zu aktualisieren?Aktualisieren von Unteransichten, wenn Daten aktualisiert werden

Rufen Sie removeFromSuperView für alle aktuellen Beschriftungen auf, und fügen Sie die Beschriftungen dann basierend auf dem aktualisierten Array erneut hinzu?

Ich möchte nicht die gesamte Ansicht neu zeichnen, da dies die Webseite im WKWebView neu laden wird.

+0

"Was ist der beste Weg, um x" Fragen sind nicht eine gute Passform für SO. Allerdings kann ich sagen, dass das Entfernen Ihrer Ansichten und das erneute Hinzufügen von Inhalten bei Änderungen der Inhalte sehr schade ist. –

Antwort

0

Die beste Möglichkeit, jedem Etikett ein eindeutiges Tag zu geben, und wenn Ihr Array geändert wird, werden nur die betroffenen Etiketten aktualisiert. Sie können es innerhalb einer Schleife tun.

Dafür können Sie beim Erstellen von Beschriftungen ein Tag basierend auf dem Array-Index angeben. Wenn Ihr Array geändert wurde, sollten Sie ein Flag haben, dass diese bestimmten Daten geändert werden, Sie sollten es durchlaufen und nur dieses Label aktualisieren. Sie können ein bestimmtes Label erhalten, indem Sie den Index dieses Elements im Array verwenden.

+1

Nah-Tags sind schrecklich. Sie in einer Sammlung zu halten ist besser und schneller. – trojanfoe

+0

@trojanfoe, gute Sache. :) – Hemang

1

Sie eine Referenz für die Etiketten in einem Array in Ihrem View-Controller ist und wenn Ihr Datenfeld geändert halten kann, dann aktualisieren Sie die Etiketten nach Bedarf:

var labels : [UILabel] = [] 

override func viewDidLoad() { 

    super.viewDidLoad() 

    // initialise a WKWebView and some others here 

    var label: UILabel! 
    for i in 0..<myArray.count { 
    label = UILabel(frame: ...) 
    scrollView.addSubview(label) 
    //Add your labels to the array here. 
    labels.append(label) 
    } 
} 

Dann, wenn Sie die Etiketten aktualisieren Entsprechend dem Array verwenden Sie nur die Etiketten-Array:

+0

Die Art, wie ich das lese ist: Führen Sie so wenige Änderungen an der GUI wie möglich durch, genau das, was notwendig ist. Wenn ich also ein Element aus dem Datenarray hinzufüge oder entferne, sollte ich am Ende der Liste der Labels ein Label hinzufügen oder entfernen und dann über alle Labels iterieren und Text basierend auf dem Array aktualisieren. Mit anderen Worten, betrachten Sie die GUI als "etabliert", sobald sie erstellt wurde, und manipulieren Sie sie auf die billigste und praktischste Art und Weise. Im Gegensatz dazu, löschen und neu zeichnen GUI nicht. Aber ich muss fragen warum? Ist es um Flimmern zu verhindern? Allgemeine Optimierung? Hat das iPhone nicht viel Macht, ein paar schäbige Etiketten neu zu zeichnen? – forthrin

+0

Für Best Practices und Optimierungen. Erste iPhone Neuzeichnen ist nicht so gut (wenn Sie einfach testen möchten, verwenden Sie eine Tabellenansicht mit Zellen, Subviews hinzufügen und entfernen bei den Layout-Update-Methoden, wird es ziemlich Laggy). Zweitens, da Ihr Label-Objekt sich nicht ändert, ist es superView, Sie haben keinen Grund, es zu entfernen und neu hinzuzufügen. (Was auch einiges an Verarbeitung kostet, [gute Referenz hierzu] (http://blog.benjamin-encz.de/post/disassembling-uikit-tintcolor-visitor/)) – Guilherme

Verwandte Themen