Ajouter des lignes dans un TableView static

Bonjour,


 


Je souhaiterai ajouter des lignes dans une section particulière d'un UITableView qui est en mode "Static Cells", mais cela depuis le code.


 


Avec un TableView dynamique c'est facile puisque qu'il suffit de modifier la source de données et de faire un [tableView reloadData], mais en static je me demande si cela est possible puisqu'il n'y a pas de source de données ?


 


Mon objectif est de créer une tableView static avec plusieurs sections, dont une qui fait appel à  un webservice et qui afficherai donc un nombre de lignes indéterminé. Les autres sections resteraient inchangées.


 


Merci pour votre attention !


Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur
    mars 2015 modifié #2
    Dans un mot, non :)


    Mais tu peux avoir plusieurs prototypes de cellules de differents formats.


    En plus, qu'est-ce qu'il arriverait s'il y avait trop de cellules dynamiques, en façon que les cellules statiques soient cachées ?
  • samirsamir Membre

    Salut,


     


    Moi j'ai pas compris ce que tu veux faire :)


  • AliGatorAliGator Membre, Modérateur
    Je ne suis pas sûr que ce soit possible de mixer du statique pour certaines section, faites en IB, et du dynamique pour d'autres sections, faites par code.

    Le plus simple à  mon avis c'est de tout faire par code. C'est à  dire :
    • Dans IB ne pas mettre ta TableView en mode Static Cells
    • Mais créer éventuellement tes cellules statiques dans ton XIB (en dehors de ta UITableView) et mettre un IBOutlet(strong) sur chacune d'elle
    • Dans ton dataSource de ta TableView, si le indexPath.section correspond à  une section statique, tu retournes comme UITableViewCell (dans "tableView:cellForRowAtIndexPath:") la bonne cellule déjà  existante (donc un de tes IBOutlets qui pointe vers une cellule créée en dur dans ton XIB). Ca revient à  faire ce que fait la TableView quand elle est en mode "statique"
    • Si le indexPath.Section correspond par contre à  une section dynamique, tu fais comme d'habitude avec les tableView dynamiques, avec "dequeueReusableCellWithIdentifier:forIndexPath:" etc.
    L'autre solution bien évidemment est, au lieu de mettre un IBOutlet sur chacune de tes cellules statiques utilisées de façon unique, et de les retourner directement, de tout faire en dynamique, et donc de mettre un reuseIdentifier sur tes cellules que tu utilisais en mode statique, et de quand même utiliser dequeueReusableCell... pour celles-là , même si elles ne seront en fait présentes qu'une seule fois dans ta TableView et que le côté "reuse" n'est pas vraiment utile, mais ce n'est pas bien grave après tout. Et si tu utilises un UIStoryboard et non un XIB, de toute façon tu ne peux pas mettre de UITableViewCell en dehors de ta UITableView si tu fais un Storyboard (qui ne contient que des "Scènes" donc des UIViewController en racine donc tu ne peux pas mettre des TableViewCell comme ça au milieu de nulle-part sans vue parente, juste pour mettre des IBOutlet(strong) dessus) donc utiliser des reuseIdentifier même pour tes cellules qui ne sont utilisées qu'une seule fois n'est pas si déconnant.
  • Joanna CarterJoanna Carter Membre, Modérateur
    mars 2015 modifié #5
    J'ai déjà  eu besoin de quelque chose de similaire et je l'ai trouver impossible avec une TableView statique parce que il fallait renvoyer le nombre de cellules du dataSource pour la partie dynamique et ça doit s'accorder avec le nombre de cellules dans le storyboard
  • samirsamir Membre

    Et ben je me suis rendu compte aujourd'hui que je ne sais pas ce que c'est une tableview dynamique/static :). ça doit être un truc de storyboard puisque je travaille encore en xib.


     


    Merci @sylvainm pour ta question. ( et désolé de polluer la discussion :))



     
  • Joanna CarterJoanna Carter Membre, Modérateur
    mars 2015 modifié #7
    @samir les TableViews dynamiques sont possibles même dans un xib
  • AliGatorAliGator Membre, Modérateur
    mars 2015 modifié #8

    Et ben je me suis rendu compte aujourd'hui que je ne sais pas ce que c'est une tableview dynamique/static :). ça doit être un truc de storyboard puisque je travaille encore en xib.

    C'est aussi possible avec les XIB il me semble. (Par contre ce n'est possible que dans un UITableViewController apparemment)

    281623062003194.png


    C'est pratique par exemple pour faire un menu, où les cellules sont uniques, toujours les mêmes, et ne se répètent pas (il n'y a pas de reuse, chaque cellule n'existe qu'une seule fois dans la TableView). D'ailleurs pour ceux qui sont adeptes des Storyboard et Segues, si tu utilises les Storyboard avec une TableView statique, tu peux du coup créer des Segue entre chaque cellule statique (= chaque entrée de ton menu) et le ViewController correspondant auquel cette entrée du menu doit mener, c'est pratique.
Connectez-vous ou Inscrivez-vous pour répondre.