Pregunta

Estoy tratando de obtener una vista ocupada muestra durante un proceso de búsqueda sin embargo, nunca parece que se vea.

Lo que estoy tratando de lograr

  1. El usuario hace clic en el botón de búsqueda una vez que han entrado en el texto de un UISearchBar.
  2. El texto introducido se delega a searchBarSearchButtonClicked.
  3. Mostrar una "vista Ocupado", que es un UIView que contiene una UIActivityIndicatorView para indicar la búsqueda está en curso.
  4. Realizar una búsqueda que se comunica con un sitio web.
  5. Una vez finalizada la búsqueda quitar la opción "Ver disponibilidad".

¿Cuál es incorrecto

El proceso de búsqueda está funcionando bien, utilizando el depurador que se puede ver en movimiento a través de la función fina searchBarSearchButtonClicked sin embargo, la "Vista Ocupado" nunca aparece. La búsqueda tarda 2-3 segundos así que en teoría debería ver a mi "Ver disponibilidad" aparecerá para los 2-3 segundos.


Código Remate 1 - Añadir y quitar la opción "Ver disponibilidad" de la supervista **

- (void)searchBarSearchButtonClicked:(UISearchBar *)activeSearchBar {

 [activeSearchBar setShowsCancelButton:NO animated:YES];
 [activeSearchBar resignFirstResponder];
 [busyView activateSpinner]; //start the spinner spinning
 [self.view addSubview:busyView]; //show the BusyView

 Search *search = [[Search alloc]init];
 results = [search doSearch:activeSearchBar.text];

 [busyView deactivateSpinner]; //Stop the spinner spinning
 [busyView removeFromSuperview]; //remove the BusyView
 [search release]; search = nil;

}

Resultados de la tentativa 1 -. No parece, sin embargo, si comento hacia fuera del removeFromSuperview Abra la vista de actividad permanece en la pantalla


Código Remate 2 - utilizando animaciones

- (void)searchBarSearchButtonClicked:(UISearchBar *)activeSearchBar {



[activeSearchBar setShowsCancelButton:NO animated:YES]; 
 [activeSearchBar resignFirstResponder];

 [UIView beginAnimations:nil context:nil];
 [UIView setAnimationDuration:0];
 [UIView setAnimationDelegate:self];
 [UIView setAnimationDidStopSelector:@selector(animationDidStop)];

 [busyView activateSpinner]; //start spinning the spinner
 [self.view addSubview:busyView]; //show the busy view

 [UIView commitAnimations];

 Search *search = [[Search alloc]init];
 results = [search doSearch:activeSearchBar.text];


 [UIView beginAnimations:nil context:nil];
 [UIView setAnimationDuration:0];
 [UIView setAnimationDelegate:self];
 [UIView setAnimationDidStopSelector:@selector(animationDidStop)];

 [busyView deactivateSpinner]; //sets stops the spinner spinning
 [busyView removeFromSuperview]; //remove the view

 [UIView commitAnimations];
 [search release]; search = nil;
}

Resultados de intento 2 - No ver la opción "Ver disponibilidad" aparecerá

¿Fue útil?

Solución

Bueno, aquí está mi solución:

  • Crear MyLoadingView clase Singleton. Esta clase debe contener métodos estáticos Mostrar y ocultar.
  • En el constructor MyLoadingView se debe crear manualmente un punto de vista con el fondo negro semi-transparente y en su interior activityview de ella. Coloca este punto de vista en [[UIApplication sharedApplication] keyWindow]. Ocultarlo.
  • invocación [MyLoadingView show] sólo trae objeto myLoadingView a frente en ella del contenedor: [[[UIApplication sharedApplication] keyWindow] bringSubviewToFront:myLoadingViewSharedInstance];. Asimismo, no se olvide de iniciar activityview animación.
  • [MyLoadingView hide] detiene animación activityview y cueros sharedInstanceView.

Por favor, aviso, de que es necesario invocar [MyLoadingView show] en un hilo separado.

Otros consejos

interfaz de usuario cambia en Cocoa solamente entrarán en vigor la próxima vez que su código vuelve el control al bucle de ejecución. Mientras su tarea de búsqueda se ejecuta de forma sincrónica en el hilo principal, bloqueará la ejecución, incluyendo las actualizaciones de la interfaz de usuario.

Se debe ejecutar la tarea que consume tiempo de forma asincrónica en el fondo. Hay una serie de opciones para este (NSOperation, performSelectorInBackground:..., Grand Central Dispatch, ...).

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