Diferiendo viewWillAppear hasta webViewDidFinishLoad
Tengo una aplicación que usaUIWebViews
en varios controladores de vista. LosUIWebViews
se utilizan para representar html generado localmente, no se requiere un acceso lento a la red.
Para ahorrar memoria, solo cargo estos a pedido según lo solicite viewcontrollerviewWillAppear
llamar de vuelta. (Y descargue instancias fuera de pantalla en respuesta adidReceiveMemoryWarning
mensajes.)
El problema es que el usuario puede ver el html renderizado, a veces acompañado de destellos de estilo y otros artefactos desagradables variados. Prefiero que el renderizado se realice fuera de la pantalla y revele la vista totalmente renderizada cuando esté listo.
ería muy ordenado poder tener elviewWillAppear
no volverá hasta que UIWebView se haya procesado completamente. ¿Pero cómo
Le digo a laUIWebView
qué representar enviándole unloadHTMLString:baseURL:
mensaje. Esto es asíncrono, y en algún momento (pronto) más tarde, se vuelve a llamar al delegado de la vista webwebViewDidFinishLoad
.
Experimenté con ejecutar un runloop dentro deviewWillAppear
, ejecutando elNSDefaultRunLoopMode
oUITrackingRunLoopMode
. Esto funciona en el simulador (se queja al log
[CATransaction sincronizar] llamado dentro de la transacción
but funciona) pero en un dispositivo se bloquea, conwebViewDidFinishLoad
nunca se llama.
(Además, parece que laUIWebView
cargando propiedad no funciona. Al menos, después de llamar aloadHTMLString:baseURL:
y antes de recibir la devolución de llamada no es cierto.)