Gatilho web-request quando usuário rola para baixo de UITableView
-
18-09-2019 - |
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 ??p>
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:
- mostrar a vista de indicador
- fazer a solicitação da web
- 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];
}
}
}
Solução
Ok. A partir do seu trecho de código acima, eu vejo alguns problemas:
- 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)
- Tudo acontece dentro do método
willDisplayCell
.
Aqui está como eu acho que você deve resolver este problema:
- Tem irá exibir carregamento gatilho célula de forma assíncrona .
- Mostrar uma célula que diz "Carregando ..." com o seu girador sobre ele (veja Tweetie 2 para a inspiração)
- Aguarde até que o call-back de seu pedido
- Preencher o modelo com a resposta ??li>
- Remova o "Carregando ..." célula
- 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