Domanda

sto cercando di far sì che un UIActivityIndicatorView "apparisca e si animi" quando un utente scorre fino alla fine di un UITableView….

Una volta raggiunta la parte inferiore della visualizzazione tabella, viene effettuata una richiesta Web che richiederà alcuni secondi per essere completata, quindi UIActivityIndicatorView dovrebbe "fermarsi e nascondersi"

Sto attivando l'aspetto di UIActivityIndicatorView utilizzando tableView:willDisplayCell:forRowAtIndexPath:

Voce dell'elenco

Ma il problema è che UIActivityIndicatorView non viene visualizzato sullo schermo dell'iPhone fino a quando non viene chiamato l'intero metodo (ad esempio, tableView:willDisplayCell:forRowAtIndexPath:) e a quel punto è già nascosto.

Qualche idea su come:

  1. mostra la vista dell'indicatore
  2. effettuare la richiesta web
  3. nascondere la vista dell'indicatore?

nuova discussione?modo migliore?

Grazie!!

nello specifico, la mia funzione è simile a questa

- (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];

        }
    }
}
È stato utile?

Soluzione

Va bene.Dal tuo snippet di codice sopra, vedo alcuni problemi:

  1. Sembra che tu abbia intenzione di attendere il completamento della richiesta prima di visualizzare una cella.Questo ha alcuni punti negativi:è fastidioso per l'utente e molto probabilmente bloccherà l'interfaccia utente mentre la richiesta viene inviata (l'operazione potrebbe richiedere diversi secondi).
  2. Tutto accade all'interno del willDisplayCell metodo.

Ecco come penso che dovresti risolvere questo problema:

  1. Verrà visualizzato il caricamento del trigger della cella in modo asincrono.
  2. Visualizza una cella che dice "Caricamento in corso..." con il tuo spinner su di essa (vedi Tweetie 2 per l'ispirazione)
  3. Attendi la richiamata dalla tua richiesta
  4. Compila il tuo modello con la risposta
  5. Rimuovi la cella "Caricamento in corso...".
  6. Forza un ricaricamento dei tuoi dati [tableView reloadData]

Ciò dovrebbe consentirti di ottenere ciò che desideri.

Altri suggerimenti

Puoi provare a farlo nel file cellForRowAtIndexPath: metodo di UITableView

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top