Pregunta

Quiero sustituir botón de actualización con el indicador de actividad cuando el usuario presiona el botón de actualización y después de la tableview se actualiza, quiero cambiar de nuevo al botón de actualización. Sin embargo, al presionar el botón de actualización, que no cambió de indicador de actividad pero el botón de actualización se pone de relieve hasta que finalice la recarga de datos.

es el código de la siguiente manera. ¿Me he perdido algo?

-(void) reloadNewsStarted{        
UIActivityIndicatorView *activityIndicatorRightBarItem = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[activityIndicatorRightBarItem startAnimating];
UIBarButtonItem *activityItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicatorRightBarItem];
[activityIndicatorRightBarItem release];
self.navigationItem.rightBarButtonItem = activityItem;
[activityItem release];

[self reloadNewsEnded];
}

-(void) reloadNewsEnded {

//reload data process

UIBarButtonItem *reloadNewsBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(reloadNewsStarted)];
reloadNewsBtn.style = UIBarButtonItemStyleBordered;
self.navigationItem.rightBarButtonItem = reloadNewsBtn;
[reloadNewsBtn release];  }
¿Fue útil?

Solución

En lugar de escribir

[self reloadNewsEnded];

Por favor, escribir

[NSThread detachNewThreadSelector:@selector(reloadNewsEnded) toTarget:self withObject:nil];

esta línea se inicia nuevo hilo en segundo plano por lo que el indicador de actividad y la recarga de datos se llevará a cabo simultáneamente en dos hilos.

Otros consejos

¿Por qué es esta línea al final del método reloadNewStarted

[self reloadNewsEnded];

parece que acaba de deshacer los cambios realizados en el botón? Usted debe estar esperando hasta que la acción se ha completado antes de llamar a

Cambiar el botón no va a entrar en vigor hasta que los Recupera bucle de ejecución controlan desde el código. Parece que su operación de recarga es sincrónico y bloquea la cola de eventos, que no permitirá que eso ocurra. Si su procesamiento tiene una notable cantidad de tiempo, es necesario utilizar un hilo de fondo o manejo asíncrono en el bucle principal de ejecución (por ejemplo, mediante el uso de NSURLConnection para gestionar una tarea de red y devoluciones de llamada) para que no se bloquee.

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