PreLoad UIWebView auf einem noch nicht angezeigten UIViewController

7

Ich habe eine App, wo es auf dem allerletzten UIViewController ein UIWebView gibt ... der Benutzer navigiert durch die App und ganz am Ende können sie (modal) mit einem UIWebView ... in seinem viewDidLoad zum letzten UIViewController übergehen Ich habe das UIWebView die Seite laden.

Das Problem ist, dass es ungefähr 8 Sekunden dauert, um diese Seite zu laden, und das nervt die Benutzer.

Wie kann ich den UIWebView-Weg im Voraus laden (z. B. wenn die App zum ersten Mal gestartet wird!), wenn dieser UIViewController noch nicht einmal vorgestellt wurde?

    
Albert Renshaw 04.02.2014, 21:26
quelle

4 Antworten

18

Ich hatte das gleiche Problem für UIWebView in einem UIPageViewController und ich fand eine bessere Lösung.

Wenn du in FirstViewController bist und dein WebView in deinem SecondViewController hast, setze die loadHTMLString oder loadRequest Methode in viewDidLoad deines SecondViewController und rufe [secondViewController.view layoutSubviews] für das Laden in deinem FirstViewController .

Beispiel:

FirstViewController

%Vor%

SecondViewController

%Vor%     
Serluca 03.09.2014, 11:12
quelle
5

Was Sie tun können, ist, laden Sie die HTML-Zeichenfolge

%Vor%

und wenn Sie das WebView anzeigen, laden Sie diesen Inhalt in Ihr WebView

%Vor%

Dann muss Ihr Webview nur Ihren Inhalt rendern und lädt die Daten nicht

/// In Swift 2.0

%Vor%

Hinweis: Dies funktioniert genauso für WKWebView

    
Eike 05.02.2014 00:06
quelle
0

Ich bin mir nicht sicher, wie viel Arbeit Sie dafür tun sollten, aber ich denke, Sie könnten die Daten aus der URL in einem NSDictionary oder ähnlichem speichern / speichern, indem Sie [NSUserDefaults standardUserDefaults] verwenden und diese Informationen vor dem Laden der Seite verwenden .

Laden Sie also das erste Mal, wenn Sie es verwenden, nachdem es gesehen wurde, und speichern Sie dann die Daten mit NSUserDefaults. Wenn Sie das nächste Mal auf diese Seite gehen, laden Sie zuerst die NSUserDefaults und rufen Sie die URL / API im Hintergrund auf und aktualisieren Sie dann NSUserDefaults mit diesen neuen Daten.

Wenn Sie jedes Mal spezifische Informationen anfordern oder abrufen, kann das nicht funktionieren. Wenn dies der Fall ist, können Sie wahrscheinlich versuchen, die Daten / Website in einen früheren View-Controller zu laden (wahrscheinlich einen, der den Benutzer eine Weile braucht, um zu navigieren) und diese Daten dann an das Webview senden. Etwas wie Delegate / Protokoll oder vielleicht sogar NSNotificationCenter. Hoffe das hilft.

    
Chris 04.02.2014 23:42
quelle
-4

UIWebView ist ein sehr kniffliges Objekt. Einfache Antwort wäre: Nein, du kannst nicht.

UIWebView lädt ein Dokument oder eine URL nicht, wenn es sich nicht in der Ansichtenhierarchie befindet. Versuchen Sie es nicht in einem anderen Thread / einer anderen Warteschlange.

Was Sie tun können, ist UIWebView ganz am Anfang der Sichten-Hierarchie hinzuzufügen (wie Sie bereits erwähnt haben) und es dann an den letzten View-Controller mit vorgeladenen Daten zu übergeben. Das mag funktionieren, aber es ist kein eleganter Weg.

Nebenfragen sind: Warum dauert es 8 Sekunden, um eine Seite zu laden? Vielleicht können Sie den Inhalt dieser Seite früher herunterladen? Ist es statisch oder dynamisch?

    
Maciej Oczko 04.02.2014 21:35
quelle