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?
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%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
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.
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?
Tags und Links objective-c ios uiwebview uiviewcontroller load