2016-04-15 7 views
0

Hier ist ein Tipp. Ich habe ein TableView mit programmatisch hinzugefügtem benutzerdefiniertem TableViewRows. Sie sind insofern benutzerdefiniert, als sie ein linksbündiges Label und einen rechts ausgerichteten Schalter haben (man denke an einen Browse-Filter). Ich habe den gleichen Typ von Zeile oben eingefügt, um alle Schalter programmgesteuert ein- und auszuschalten.Appcelerator Erzwingen, dass alle TableView-Zeilen beim Laden gerendert werden

All dies funktioniert wie vorgesehen, AUSSER wenn ich mehr Zeilen habe, als auf den Bildschirm passen und versuchen, alle umzuschalten. In diesem Fall werden die benutzerdefinierten Zeilen, die nicht auf dem Bildschirm angezeigt werden, nicht gerendert, wenn die Ansicht geladen wurde, und daher wird ihr geändertes Ereignis nicht ausgelöst, wenn sie programmgesteuert verarbeitet werden.

Wenn ich manuell nach unten scrollen, um das Rendern aller Zeilen zu erzwingen, dann versuche alle umzuschalten, es funktioniert ganz gut.

Gibt es eine Möglichkeit, alle TableView-Zeilen (auch solche außerhalb des Bildschirms) zu rendern, wenn die Ansicht geladen wird? Oder gibt es einen Workaround, mit dem ich leben kann?

+0

Lazy Rendering ist in den iOS- und Android-SDKs eingebaut, um die Leistung zu verbessern. Ich glaube nicht, dass wir das deaktivieren können. –

Antwort

0

Hier ist meine aktuelle Problemumgehung. Im Fenster OnOpen-Ereignis rufe ich meine Funktion auf, um Tabellendaten zu initialisieren. Dies ist wichtig, weil dadurch sichergestellt wird, dass die erste Ladung funktioniert.

Dann erzwinge ich scrollToIndex auf die letzte Zeile, dann sofort scrollToIndex zurück in die erste Zeile. Da ich dies direkt nach dem Hinzufügen von Zeilen mache, muss ich setTimeout verwenden, um sicherzustellen, dass es die Ladezeit abdeckt.

setTimeout(function() { 
    $.tblOptions.scrollToIndex(lastIndex, { animated: false, position: Titanium.UI.iPhone.TableViewScrollPosition.BOTTOM }); 
}, 0); 

Da dies einen schreckhaft User Experience schafft, blende ich die Tabelle während der Last, zeigt eine Aktivitätsanzeige, dann wieder zeigt Tabelle nach Last.

Das wird für jetzt funktionieren, aber ich frage mich immer noch, ob es eine einfachere Lösung gibt.

Verwandte Themen