Pergunta

Eu estou tentando obter um UIActivityIndicatorView para "aparecer e animado" quando o usuário rola para a parte inferior de um UITableView ....

Ao chegar à parte inferior da exibição de tabela, um web-pedido é feito que vai demorar alguns segundos para ser concluído e, em seguida, o UIActivityIndicatorView deveria "parar e se esconder"

Eu estou provocando o aparecimento do UIActivityIndicatorView usando tableView: willDisplayCell: forRowAtIndexPath:

item da lista

Mas o problema é que o UIActivityIndicatorView não aparecer na tela do iPhone até depois de todo o método (ou seja, tableView: willDisplayCell: forRowAtIndexPath :) é chamado, e então ele também já está escondido.

Todas as idéias a respeito de como:

  1. mostrar a vista de indicador
  2. fazer a solicitação da web
  3. ocultar a vista indicador?

novo segmento? melhor maneira?

Graças !!

especificamente, a minha função se parece com isso

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

        }
    }
}
Foi útil?

Solução

Ok. A partir do seu trecho de código acima, eu vejo alguns problemas:

  1. Você parece plano à espera para a solicitação ao fim antes de exibir uma célula. Isto tem alguns pontos negativos a ele:. É irritante para o usuário e muito provavelmente irá congelar a interface do usuário enquanto o pedido sai (o que pode demorar alguns segundos)
  2. Tudo acontece dentro do método willDisplayCell.

Aqui está como eu acho que você deve resolver este problema:

  1. Tem irá exibir carregamento gatilho célula de forma assíncrona .
  2. Mostrar uma célula que diz "Carregando ..." com o seu girador sobre ele (veja Tweetie 2 para a inspiração)
  3. Aguarde até que o call-back de seu pedido
  4. Preencher o modelo com a resposta
  5. Remova o "Carregando ..." célula
  6. Força uma recarga do seu [tableView reloadData] dados

Isso deve permitir que você conseguir o que você quer fazer.

Outras dicas

Você pode tentar fazê-lo no cellForRowAtIndexPath: método do UITableView

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top