Je crée un UITableView avec un contrôle UISegmented dans l'onglet Appels récents de l'application Téléphone.Configuration du modèle pour les données UITableView qui seront filtrées à l'aide d'un UISegmentedControl
Le premier segment sera tous les éléments, les 2 suivants seront des sous-ensembles de la liste complète des éléments.
J'ai créé 3 tableaux qui contiennent les 3 listes de données différentes.
Ma première solution est un échange de gros des données et un reload:
[self setData:newData];
[self.tableView reloadData];
Cela fonctionne très bien à l'exception de l'animation, il n'y a pas d'indicateurs que les données ont bien changé. Je pourrais ajouter une sorte de message indicateur, mais je préfère utiliser la méthode employée par l'application de téléphone, un effet "accordéon" effondrement des cellules supprimées et l'expansion des cellules ajoutées.
Pour ce faire, vous ne pouvez pas simplement échanger les données (ou le pouvez-vous?). Cela ne déclenche pas d'animation. Le seul moyen que je vois est de supprimer manuellement et d'ajouter des cellules du modèle de sauvegarde. Alors, quel est un algorithme efficace pour accomplir cela? Ma première estimation:
J'ai un tableau multidimensionnel pour représenter des sections de cellules.
- créer un tableau pour contenir l'index chemins de cellules à ajouter
- itérer dans chaque section des nouvelles données
- vérifier si la section des nouvelles données a le même nombre que l'ancien données
- sinon, itérer sur chaque élément les nouvelles données
- Si l'article est aussi dans les anciennes données, ne font rien
- Si l'article n'est pas dans les anciennes données, chemin d'index d'ajout d'élément à matrice de cellules à être ajouté
- pour chaque élément dans la section
- répétition pour chaque section Les nouvelles données
- créer un tableau pour maintenir l'index chemins de cellules à supprimer
- itérer dans chaque section des données VIEUX
- vérifier si la section des données NEW a le même compte que les anciennes données
- sinon, itérer sur chaque élément les anciennes données
- Si l'article est également dans les données NOUVEAU, rien
- Si l'article n'est pas dans les nouvelles données, ajouter le chemin d'index de l'élément à réseau de cellules soit supprimé
- répétition pour chaque élément de section
- répétition pour chaque section de données OLD
alors appeler les méthodes de UITableView apprpriate:
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
Cet algorithme semble avoir beaucoup de place pour l'amélioration. Quelqu'un at-il déjà abordé ce problème? Comment l'avez-vous mis en œuvre?
Merci pour toute entrée
méthode est logique, sauf que vous avez dit l'effet d'accordéon. Sinon, c'est facile. Je l'ai déjà implémenté sans animation, je voulais juste être joli ... J'ai considéré la superposition, mais j'essayais juste de faire en sorte que l'application utilise des comportements "standard". –