2009-08-04 8 views
1

Je suis sûr que c'est une chose facile à faire. Je suis très nouveau à l'objectif C (ramassé un travail que le patron allait externaliser) et pourrait utiliser toute l'aide que je peux obtenir. Juste pointez-moi dans la bonne direction ici. Fondamentalement, ce que je veux mettre en place est la suivante:Déplacer la rangée UITableView en haut de la liste quand elle est sélectionnée

J'ai une liste de numéros de téléphone qui se développe en autant de lignes que nécessaire. Je n'ai aucun problème à remplir et la liste fonctionne bien, mais j'aimerais que tous les éléments récemment sélectionnés dans la liste soient plus facilement accessibles en haut. Donc, chaque fois que l'utilisateur "didSelectRowAtIndexPath", je voudrais que la ligne se déplace vers le haut.

Je sais juste que c'est super simple ... mais je n'ai pas encore trouvé la solution. Pas d'urgence. J'essaie juste de comprendre les choses par moi-même. Merci d'avance!

Répondre

3

L'ordre des éléments est sous la responsabilité de la source de données (votre code), pas de la vue de la table. Si vous voulez réorganiser les choses, vous devez réorganiser la structure de données que vous utilisez pour conduire -cellForRowAtIndexPath:. Si vous voulez des animations, je ne crois pas qu'il existe encore une bonne animation de mouvement. Le mieux que vous pouvez probablement faire (facilement) est d'effectuer une suppression et une insertion. Voir Batch Insertion and Deletion of Rows and Sections pour plus de détails sur la façon de l'animer. Il y a quelques mois, j'ai interrogé les développeurs de UITableView sur la bêtise générale et la fragilité de ces animations dans OS2.x, et ils m'ont assuré que beaucoup de travail était fait pour améliorer cela dans OS3. Donc, j'espère que vous pouvez simplement suivre la documentation et ne devrait plus planter.

0

UITableView a une méthode appelée

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath

Je crois que vous avez réellement à écrire le code bien, je ne suis pas sûr parce que je ne l'ai jamais travaillé avec des tables (je suis nouveau aussi) .

2

Il n'est pas possible de supprimer une ligne d'un emplacement de la table à un autre. Il peut être émulé en supprimant la ligne, puis en ajoutant le dans au nouvel emplacement:

// Remove the row from your datasource here 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:sourcePath] withRowAnimation:UITableViewRowAnimationLeft]; 
// Add the row back into the datasource here 
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:destPath] withRowAnimation:UITableViewRowAnimationLeft]; 

Remplacer les commentaires avec les commandes appropriées pour mettre à jour votre source de données

0

Essayez ceci (la liste de code de travail):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

if(indexPath.row == 0) return; 

NSString * selectedNum = [numbers objectAtIndex:indexPath.row]; // NSMutableArray* numbers = dataStore 
[selectedNum retain]; 

[numbers removeObjectAtIndex:indexPath.row]; 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
      withRowAnimation:UITableViewRowAnimationLeft]; 
[numbers insertObject:selectedNum atIndex:0]; 
[tableView insertRowsAtIndexPaths:[NSArray 
      arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] 
      withRowAnimation:UITableViewRowAnimationLeft]; 

[selectedNum release]; 

}

+0

Salut @Tomas, votre code fonctionne, mais peut-on avoir un effet d'animation comme application claire – Ranjit

Questions connexes