Comment concevoir la source de données pour un UITableView afin de trier avec un UISegmentedControl?
-
20-08-2019 - |
Question
Je suis en train de concevoir et de coder une application iPhone pour afficher les horaires des films. J'ai actuellement une classe de film qui contient:
-
NSString title
-
NSSDate releaseDate
-
NSSDate score
Mon interface utilisateur est un simple UINavigationController
qui a un contrôle segmenté en tant que titre et UITableView
pour afficher la configuration des séquences dans Interface Builder. Le contrôle segmenté a 3 segments: Titre, Date d'ouverture et Score (sur RottenTomatoes). Les données de la vue tabulaire sont actuellement fournies par un NSMutableArray movies
qui est une propriété de AppDelegate.
Je sais que je peux enregistrer des actions cibles à l'aide du code suivant, mais je ne sais pas comment trier les UISegmentedControl
données à ce stade:
[segmentedControl addTarget:self action:@selector(action:) forControlEvents:UIControlEventValueChanged];
Comment et où dois-je recourir au <=> chaque fois que le <=> segment sélectionné est modifié?
La solution
De plus, vous pouvez trier les données avec l’une des sortArrayUsing
méthodes xxx dans NSArray
.
Autres conseils
Vous pouvez définir une logique dans la méthode tableView:cellForRowAtPath:
de la source de données pour vérifier la valeur actuelle de UISegmentedControl et modifier la cellule renvoyée pour chaque ligne, le cas échéant. Ensuite, chaque fois que la valeur du contrôle segmenté change, il vous suffit d'appeler
[tableView reloadData];
et vous êtes tous ensemble.
J'ai un contrôle de segment qui peut commander / filtrer les éléments de trois manières différentes, car le nombre d'éléments varie en fonction du filtre / de la commande. J'utilise 3 objets NSArray différents pour contenir les listes triées.
Ainsi, lorsque je charge les données, j'en mets une version au bon endroit dans chaque tableau (ou pas dans le tableau en fonction du filtre).
J'ai un appel à obtenir le tableau qui utilise l'état du contrôle segmenté pour décider quel tableau renvoyer.
La méthode qui appelle un tableau est utilisée à la place d'un tableau normal et cela signifie que tout ce que je dois faire pour changer les choses lorsqu'un contrôle segmenté est modifié est d'appeler [tableView reloadData] et que tout est fait pour moi.