Pregunta

Estoy intentando que UIActivityIndicatorView "aparezca y se anime" cuando un usuario se desplaza hasta la parte inferior de UITableView….

Al llegar al final de la vista de tabla, se realiza una solicitud web que tardará unos segundos en completarse y luego UIActivityIndicatorView debería "detenerse y ocultarse".

Estoy activando la apariencia de UIActivityIndicatorView usando tableView:willDisplayCell:forRowAtIndexPath:

Elemento de lista

Pero el problema es que UIActivityIndicatorView no aparece en la pantalla del iPhone hasta que se llama al método completo (es decir, tableView:willDisplayCell:forRowAtIndexPath:), y para entonces ya está oculto.

Alguna idea sobre cómo:

  1. mostrar la vista del indicador
  2. hacer la solicitud web
  3. ¿Ocultar la vista del indicador?

¿nuevo hilo?¿mejor manera?

¡¡Gracias!!

específicamente, mi función se ve así

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.results && indexPath.row == [self.results count] - 1) {
        [self.loadingSignal setHidden:NO]; // <====== my UIActivityIndicatorView is called "loadingSignal"
        [self.loadingSignal startAnimating];

    /// make web request that will take a few seconds

        [self.loadingSignal setHidden:YES];
        [self.loadingSignal stopAnimating];

        }
    }
}
¿Fue útil?

Solución

Bueno.Del fragmento de código anterior, veo algunos problemas:

  1. Parece que planeas esperar a que finalice la solicitud antes de mostrar una celda.Esto tiene algunos puntos negativos:es molesto para el usuario y lo más probable es que congele la interfaz de usuario mientras se envía la solicitud (lo que puede tardar varios segundos).
  2. Todo sucede dentro del willDisplayCell método.

Así es como creo que deberías resolver este problema:

  1. Have mostrará la carga del disparador de celda asincrónicamente.
  2. Muestre una celda que diga "Cargando..." con su rueda giratoria (consulte Tweetie 2 para inspirarse)
  3. Espere la devolución de llamada de su solicitud.
  4. Complete su modelo con la respuesta
  5. Quitar la celda "Cargando..."
  6. Forzar una recarga de tus datos [tableView reloadData]

Esto debería permitirle lograr lo que desea hacer.

Otros consejos

Puede intentar hacerlo en el cellForRowAtIndexPath: método de la UITableView

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