UITableView
Paisible.fr
Membre
Bonjour,
Je commence à jouer un peu avec le SDK iPhone. Il y a un truc sur lequel je bute un peu.
J'ai une UITableView que j'arrive à peupler sans problème et à gérer en revanche je n'arrive pas à faire la même chose pour avoir plusieurs niveaux. L'idée est d'avoir l'équivalent d'un NSOutlineView.
Je n'arrive pas à comprendre s'il faut jouer avec les "sections" (et comment ?) ou s'il faut créer une UITableView par niveau.
J'ai cherché des exemples sur le net et parcouru quelques exemples fournis par Apple mais rien d'approprier.
Quelqu'un peut-il me mettre sur la voie ? Merci.
Je commence à jouer un peu avec le SDK iPhone. Il y a un truc sur lequel je bute un peu.
J'ai une UITableView que j'arrive à peupler sans problème et à gérer en revanche je n'arrive pas à faire la même chose pour avoir plusieurs niveaux. L'idée est d'avoir l'équivalent d'un NSOutlineView.
Je n'arrive pas à comprendre s'il faut jouer avec les "sections" (et comment ?) ou s'il faut créer une UITableView par niveau.
J'ai cherché des exemples sur le net et parcouru quelques exemples fournis par Apple mais rien d'approprier.
Quelqu'un peut-il me mettre sur la voie ? Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
NSArray * stringsInSection=[sections objectAtIndex:indexPath.section];
cell.text=[stringsInSection objectAtIndex:indexPath.row];
On a un écran plus petit, pas de multifenêtres, etc... ça nous oblige aussi à penser autrement côté design.
La UITableView ne permet pas de faire d'arborescences à proprement parler comme on peut voir dans le Finder en mode Liste avec les petits triangles pour ouvrir un dossier et voir son contenu, indenté, sous le nom du dossier.
La UITableView permet à l'origine de faire des listes uniquement. Cependant, on peut couper ces listes en sections, pour éviter d'avoir une liste de 3km non stop, on peut avoir au milieu de la liste des petits en-têtes gris pour indiquer les sections. C'est ce que l'on retrouve dans l'application "Carnet d'Adresses" de l'iPhone où l'on voit la liste des contacts, mais découpée en sections d'après la première lettre, avec un petit en-tête "A" avant la liste de ceux dont les noms commencent par A, etc.
On peut même y rajouter un index à droite pour avoir la liste des sections sur la droite de la UITableView et pouvoir rapidement accéder à une section.
Ces 2 possibilités (sections et index sur la droite) sont propres à la UITableView on ne les retrouve pas dans la NSTableView.
Par contre pour mimer le comportement d'une NSOutlineView, il faut penser ça sur plusieurs écrans. Pour ça il faut voir avec les NavigationControllers. L'idée c'est d'avoir une "page" (un "écran iPhone") par niveau de l'OutlineView et non pas de tout caser sur la même vue. Après, il suffit de pousser un nouveau UITableViewController dans le NavigationController à chaque fois que l'utilisateur clique sur une cellule de ta liste (UITableView) pour lui afficher le niveau hiérarchique suivant.
Le NavigationController va se dévrouiller tout seul pour garder en mémoire dans sa pile de VC les tables représentant les niveaux intermédiaires, va te mettre aussi tout seul le bouton en haut à gauche pour retourner au niveau hiérarchique précédent, etc.
Pour plus d'infos, lire ici pour les NavigationControllers et Là pour l'utilisation conjointe des NavigationControllers et des TableViewControllers
Celà étant, la performance a l'air bonne dans le simulator (avec 3 sections)mais je sais que reloadData est censé être assez gourmant et je n'ai pas testé sur le device.
Pour voir un screencast d'une UITableView qui se comporte comme une NSOutlineView:
http://pagesperso-orange.fr/cocoadev/filtereditor/Screencast.html
Alors qu'avec la méthode [tt]pushViewController:animated:[/tt] de UINavigationController, tout ça est fait tout seul, animation, stockage des vues dans une pile, gestion en cas de mémoire limitée, ajout du bouton pour remonter à l'étape précédente... tout automatique, quoi Ce qui ne t'empêche pas d'avoir qu'un seul NIB bien sûr
Y'a sûrement un avantage à ta méthode à n'utiliser qu'un seul UIViewController et changer ses données et faire du reloadData derrière, mais j'avoue que je vois pas pour l'instant
je n'ai pas de bouton de retour pour recharger, tout se passe dans une vue, une tableview et un controller. La racine de la outlineView-like est représentée par la première section de la tableview et ensuite on déroule dans les sections inférieures.
• A A
B •B
- Selection de B > reloadData ---->
C E
D F
Là oui d'accord, je vois que tu fais le reloadData en effet, et pourquoi pas dans ce cas d'utilisation ça se comprend... Mais heu pour moi ça ne mime pas le comportement des NSOutlineView à plusieurs niveaux hiérarchiques, ça...
On a la hiérarchie avec la notion de noeuds comme pour la outline view. Par contre on ne peut pas visualiser plusieurs noeuds ouverts en même temps mais une hiérarchie à base de UIViewControllers non plus.