Como recarregar e animar apenas uma célula / linha do UITableView?

Como posso recarregar e animar apenas uma célula / linha? Agora eu baixei alguns arquivos. Toda vez que um arquivo terminar de ser baixado, eu ligo que ele terminou o delegate e chame [tableview reload]. Mas então toda a tabela é recarregada. E como posso animar a tabela, para que ela não pisque. Por exemplo, um efeito de desvanecimento ou mais.

cumprimenta Max

Use o seguinte método de instância UITableView :

 - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 

Você precisa especificar um NSArray de NSIndexPaths que deseja recarregar. Se você quer apenas recarregar. Se você quiser apenas recarregar uma célula, você pode fornecer um NSArray que apenas contenha um NSIndexPath . Por exemplo:

 NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:3 inSection:0]; NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil]; [myUITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone]; 

Você pode ver a enumeração UITableViewRowAnimation para todas as maneiras possíveis de animar a atualização de linha. Se você não quiser nenhuma animação, poderá usar o valor UITableViewRowAnimationNone , como no exemplo.

O recarregamento de linhas específicas tem uma vantagem maior do que simplesmente obter o efeito de animação desejado. Você também obtém um grande aumento de desempenho porque somente as células que realmente precisam ser recarregadas são atualizadas, reposicionadas e redesenhadas. Dependendo da complexidade de suas células, pode haver uma sobrecarga toda vez que você atualizar uma célula, portanto, restringir a quantidade de atualizações feitas é uma otimização necessária que você deve usar sempre que possível.

Se você só precisa atualizar o texto na célula tableview ..

 UITableViewCell *cell = [_myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]]; cell.textLabel.text = [NSString stringWithFormat:@"%i", (int)_targetMaxDistanceSlider.value]; 

Documento Apple feito com nova syntax

 [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; 

Para recarregar determinadas células em um tableView em determinados indexPaths , é necessário criar uma matriz de indexPaths e, em seguida, chamar a function reloadRowsAtIndexPaths no tableView .

Aqui está o exemplo:

Rápido:

 let indexPathsToReload = [indexPath1, indexPath2, indexPath3] tableView.reloadRowsAtIndexPaths(indexPathsToReload, withRowAnimation: .None) 

Objetivo C:

 NSArray *indexPaths = @[indexPath1, indexPath2, indexPath3]; [self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; 

ou

 NSArray *indexPaths = [NSArray arraywithobject:@"indexPath1", @"indexPath2", @"indexPath3",nil]; [self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];