2010-06-26 5 views
28

Quelqu'un peut-il m'aider avec le problème d'animation UITableView?UITableView Ajouter une cellule Animation

Par défaut, nous avons une animation pour la suppression des cellules et la réorganisation des cellules dans UITableView. Peut-on avoir animé l'ajout de cellule, si oui, comment le faire.

J'ai vérifié Three20, ne pas obtenir comment twitter a fait la table d'élargir l'animation sous MyProfile> retweets.

Vous voulez essayer sans Three20 frameowrk, en utilisant l'animation existante dans UITableView.

Répondre

60

Vous pouvez utiliser la méthode UITableView suivante:

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

Exemple avec self.dataSource étant un tableau mutable et votre table ne comportant 1 section:

[self.dataSource addObject:@"New Item"]; 
NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:[self.dataSource count]-1 inSection:0]; 
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 

Note: 1 de Soustrait nombre de sources de données puisque NSIndexPath est indexé à zéro.

+0

merci pour le code, pouvez-vous me donner un échantillon de travail? o Je suis légèrement confus avec la façon de mettre à jour la source de données pendant l'insertion. – Ameya

+0

plus tôt je voudrais simplement ajouter un enregistrement à la source de données (NSMutableArray) et en appelant [self.tableView reloadData]; Mais cela n'introduirait pas de manière animée le nouvel élément. – Ameya

+1

juste un petit changement dans votre code @JK plz modifier votre réponse, j'espère que cela aide quelqu'un qui cherche ce genre de solution. [tableView insertRowsAtIndexPaths: [NSArray arrayWithObjects: [NSIndexPath indexPathForRow: [self.dataSource count] inSection: 0], nil] withRowAnimation: UITableViewRowAnimationRight]; – Ameya

10

Swift

matrice de l'exemple qui est la source de données pour l'affichage du tableau

var myArray = ["Cow", "Camel", "Sheep", "Goat"] 

Ce qui suit va ajouter une ligne d'animation en haut de l'affichage du tableau.

// add item to current array 
myArray.insert("Horse", atIndex: 0) 

// insert row in table 
let indexPath = NSIndexPath(forRow: 0, inSection: 0) 
tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade) 

mises à jour multiples

Si vous devez faire plusieurs insertions et/ou délétions les entourer ensuite avec beginUpdates() et endUpdates().

tableView.beginUpdates() 
tableView.insertRowsAtIndexPaths([addIndexPath1, addIndexPath2, ...], withRowAnimation: .Fade) 
tableView.deleteRowsAtIndexPaths([deleteIndexPath1, deleteIndexPath2, ...], withRowAnimation: .Fade) 
tableView.endUpdates() 

Autres lectures

+1

J'utilise votre code pour insérer les lignes dont j'ai besoin, mais peu importe le type d'animation que je choisis, il s'anime toujours de la même manière (ie fondu, botom, left, tous ont le même comportement) . Des idées pour lesquelles cela arrive? –

+0

@GeorgeAvgoustis, je n'ai pas travaillé sur cela pendant un moment, donc je ne sais pas. Je vais le mettre sur ma liste de choses à vérifier, mais je ne pourrais pas y arriver pendant un moment. Si vous le comprenez en premier, veuillez laisser un autre commentaire. – Suragch

0

Utilisez reloadRowsAtIndexPaths: indexPath

tableView.beginUpdates() 
    [tableView reloadRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationAutomatic]; 
    tableView.endUpdates() 

J'espère que cela vous aidera ..

Questions connexes