Dev IPhone : UITableViewController ?

de | 8 novembre 2010

Aujourd’hui nous allons parler un peu développement Iphone avec l’utilisation des UITableViewController. En préambule, je m’excuse pour le jargon technique employé. Il est trop difficile d’expliquer ceci en vulgarisant les éléments qui sont présentés dans cet article.

Vous l’avez compris, si vous n’êtes pas développeur IPhone, vous risquez de ne pas comprendre grand chose (et c’est normal).

UIViewController à la place de UITableViewController (Interface Builder)

UIViewController à la place de UITableViewController (Interface Builder)


Comme vous le savez UITableViewController permet de créer des listes (pensez à l’application Mail de votre IPhone) de type UITableView avec le controller associé qui défini le Delegate et le DataSource de la table.

Par contre, ce composant – bien que très efficace (Xcode génère la plupart des méthodes à implémenter) – possède quelques limitations gênantes.
En effet, il est très difficile d’ajouter des subViews car celles-ci vont forcément scroller avec la TableView. Ce comportement peut parfois être utile mais n’est souvent pas celui attendu !

De même, le composant UITableViewController doit forcément être en plein écran ce qui nous empêche de réduire la TableView. On risque aussi de passer un sale quart d’heure si on souhaite modifier la couleur de fond de la vue.

C’est pourquoi je préfère utiliser un UIViewController (tout simplement) auquel je vais ajouter un UITableView (de la taille voulue) depuis Interface Builder. Ensuite, on va implémenter les méthodes du Delegate et du DataSource de la TableView directement dans le controller UIViewController.

Ce fonctionnement, bien qu’un peu plus long à mettre en place, permet d’ajouter tous les éléments qu’on souhaite à la View (Label, Bouton, etc). Lorsque l’utilisateur décidera de scroller la TableView, ces autres éléments resteront en place sans problème.

Il existe surement des solutions plus élégantes mais celle-ci à fait ses preuves. Donc si vous avez des problèmes lors du développement d’une application IPhone et que celle-ci utilise un UITableViewController, pensez à regarder du côté de UIViewController qui offre beaucoup plus de flexibilité 😉

PS : n’oubliez pas de raccorder le Delegate et le DataSource de la TableView depuis Interface Builder pour que cela fonctionne !

Une réflexion au sujet de « Dev IPhone : UITableViewController ? »

  1. Stman

    C’est parfait pour résoudre le problème que tu cites, par contre, il n’est plus possible de disposer des fonctionnalités spécifiques d’un UITableViewController permettant de gérer automatiquement le mode « Edition » d’une UITableView qui permet de « Déplacer des lignes avec le doigt » et d’en détruire.

    L’idéal serait de pouvoir disposer d’un UITableViewController qui n’a pas la contrainte d’avoir un object UITableView racine dans un Xib (On peut embedder la UITableView dans une UIView, tel que tu le fais remarquer dans ta note), mais qui conserverait la capacité de gérer le mode « Edition ».

    Je pense qu’il doit être possible de « bricoler » un UITableViewController avec des catégories ou du swizling mais je n’ai pas encore trouvé de courageux développeur ayant tenté de résoudre ce problème.

    Le plus simple serait qu’Apple fasse sauter cette limitation dans le chargement du Xib d’un UITableViewController qui impose que l’objet racine soit une UITableView, mais pour cela, j’ai bien peuvent que l’on doive attendre encore longtemps, hélas.

    Si quelqu’un a une solution clean, je suis preneur 😀

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.