¿Agregar "Ahora cargando" antes de seleccionar la pestaña UITabBarController?

StackOverflow https://stackoverflow.com/questions/608162

  •  03-07-2019
  •  | 
  •  

Pregunta

Una de las pestañas de mi UITabBarController toma algún tiempo para funcionar antes de que se pueda mostrar.

¿Cuál es la mejor manera de mostrar un " Cargando ahora " ¿Antes de que el controlador de vista complete su trabajo?

Intenté configurar un " ahora cargando " ver en el método viewDidLoad de viewController de la pestaña, luego hago el trabajo en viewDidAppear, estableciendo una marca para no volver a hacer el trabajo la próxima vez a través de viewDidAppear.

Sin embargo, nunca veo el " ahora cargando " vista ... se debe realizar alguna optimización: se llama a viewDidAppear del controlador de vista antes de que TabBarControllerDelegate didSelectViewController.

¿Existe un mecanismo UITabBarController que permita que se muestre una vista de marcador de posición antes de que se muestre el controlador de vista?

¿Alguna idea?

Gracias- Matt

¿Fue útil?

Solución

La técnica a utilizar aquí es esta:

  1. coloca una " Vista de carga " en tus viewWillAppear del controlador: o viewDidLoad: method
  2. entonces, genera un nuevo hilo para hacer el carga real (o cualquier hora) proceso de consumo que estás haciendo)
  3. cuando termine, envíe un mensaje a la controlador (utilizando el delegado patrón, por ejemplo) que el " cargando " esta hecho
  4. finalmente, elimina la vista Cargando y dejar que el usuario proceda

Si lo haces de esta manera, la interfaz de tu aplicación seguirá siendo utilizable, aunque el controlador de vista en particular esté ocupado.

No hay métodos integrados para hacer esto, tendrás que codificarlo todo tú mismo.

Otros consejos

Podría estar equivocado, pero tal vez su problema sea que al hacer el trabajo que consume mucho tiempo en viewDidAppear, está bloqueando el hilo principal del evento para que la vista no se actualice hasta que el trabajo esté completo. Es decir. configura el " ahora cargando " en viewWillAppear, pero nunca lo ves ya que, para cuando viewDidAppear se completa, se hace con el trabajo pesado.

El método PerformSelector: withObject: afterDelay de NSObject puede ser útil aquí. Muestra tu " Por favor, espera " alerta o vea, o lo que sea, luego use performSelector: withObject: afterDelay: para iniciar el trabajo real. Su carga se retrasará hasta después de la próxima ejecución del bucle de eventos, momento en el cual la interfaz de usuario se habrá rediseñado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top