2009-10-27 5 views
4

Je voudrais créer une grille de données qui défile à la fois verticalement et horizontalement et qui a des en-têtes de lignes et de colonnes collantes (pour que vous puissiez faire défiler les données tout en continuant d'afficher les en-têtes de ligne). Quelle est la meilleure façon de faire cela?iPhone: vue DataGrid personnalisée, sous-classe UITableView ou autre?

J'ai envisagé de créer ma propre vue DataGrid personnalisée qui gère son propre rendu, mais cela semble beaucoup de travail. Il semble que l'ajout de plusieurs UITableViews à un UIScrollView puisse fonctionner, mais je ne sais pas comment rendre la première ligne et la première colonne collantes tout en faisant défiler le reste d'entre elles ensemble. Ou peut-être pourrais-je sous-classer UITableView et lui ajouter des colonnes.

Pour un exemple de quelque chose de similaire à ce que je cherche, voir http://www.roambi.com/. Cliquez sur l'exemple SuperList et jouez avec la vue ici.

J'ai réussi à recréer l'effet que je recherche dans un UIWebView avec un tableau HTML, un JavaScript personnalisé et CSS, mais les performances sur l'iPhone sont terribles avec cette méthode.

+0

J'ai écrit som Ething qui, je crois, aborde les bases de ce que vous cherchez. Je n'ai pas d'en-têtes de lignes collantes, mais les en-têtes de colonnes restent là où ils sont censés et la plupart du rendu fonctionne plutôt bien. Je ne pense pas qu'il en faudrait trop pour modifier la première cellule de chaque rangée pour rester au même endroit si vous en avez besoin. https://github.com/AlanSamet/ASDataGridView –

Répondre

3

Je ne pense pas que le sous-classement UITableView corresponde à vos besoins. Mais vous pouvez répliquer les motifs de conception utilisés par UITableView. Cela simplifierait à la fois le développement et l'utilisation de votre vue.

Je voudrais aller à ce sujet le long de ces lignes:

  • Déclare protocoles DataGridViewDelegate et DataGridViewDatasource qui imitent leurs homologues uitableview.
  • DataGridView est une sous-classe UIScrollView. Il a deux ivars delegate et datasource.
  • DataGridViewCell est une sous-classe UIView similaire à UITableViewCell.
  • Une catégorie sur NSIndexPath similaire NSIndexPath(UITableView) qui facilite l'utilisation des chemins d'index pour adresser les lignes, les colonnes et (éventuellement, si vous voulez les implémenter) sections.
  • DataGridView appelle les méthodes de DataSource numberOfRowsInDataGridView: et numberOfColsInDataGridView: et les méthodes déléguées heightForCellAtIndexPath: et widthForCellAtIndexPath: (ou, à défaut mis en œuvre, utilise par défaut cellWidth et cellHeight propriétés) pour calculer la taille de la grille et définissez les vues de défilement contentSize propriété.
  • Lorsque DataGridView doit s'afficher ou lorsqu'il est défilé, appelez la méthode de source de données dataGridView:cellAtIndexPath: pour afficher la sous-vue de chaque cellule. Ajoutez-les comme sous-vues. Implémentez un système de réutilisation de cellules comme UITableView.
  • ...

Cela peut sembler beaucoup de travail, mais je pense qu'il est possible. Je ne suis pas sûr de savoir comment implémenter au mieux les lignes d'en-tête/cols fixes (sans défilement).

0

Une autre alternative pourrait être ce iOS data grid composant - il est libre, mais tout à fait plein de fonctionnalités, telles que la suppression de la ligne animée et frontières/personnalisation des couleurs.

Questions connexes