NRGridView
Bonjour,
Je vous propose mon premier composant open-source, puisque ma boà®te m'a autorisé à le rendre comme tel.
NRGridView est une vue en quadrillage qui fonctionne de la même manière que UITableView.. C'est à dire que les méthodes dataSource & delegate sont quasiment identiques.
Aperçus:
https://github.com/l...l-Landscape.png
https://github.com/l...al-Portrait.png
J'ai effectué ce travail dans le cadre de deux projets pour le groupe Total en France. Sur le coup, il nous servira surtout à afficher des photos, avec sections.
J'espère aussi que mon travail pourra donner envie à certaines personnes de rejoindre nos rangs, car nous recherchons encore et toujours des développeurs iOS sur Toulouse /wink.png' class='bbc_emoticon' alt=';)' /> La boà®te s'appelle Novedia Regions.
NRGridView est disponible sur GitHub
N'hésitez pas à partager ça autour de vous /wink.png' class='bbc_emoticon' alt=';)' />
Louka.
Je vous propose mon premier composant open-source, puisque ma boà®te m'a autorisé à le rendre comme tel.
NRGridView est une vue en quadrillage qui fonctionne de la même manière que UITableView.. C'est à dire que les méthodes dataSource & delegate sont quasiment identiques.
Aperçus:
https://github.com/l...l-Landscape.png
https://github.com/l...al-Portrait.png
J'ai effectué ce travail dans le cadre de deux projets pour le groupe Total en France. Sur le coup, il nous servira surtout à afficher des photos, avec sections.
J'espère aussi que mon travail pourra donner envie à certaines personnes de rejoindre nos rangs, car nous recherchons encore et toujours des développeurs iOS sur Toulouse /wink.png' class='bbc_emoticon' alt=';)' /> La boà®te s'appelle Novedia Regions.
NRGridView est disponible sur GitHub
N'hésitez pas à partager ça autour de vous /wink.png' class='bbc_emoticon' alt=';)' />
Louka.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Bravo et merci.
Donc ça serait à comparer... mais je pense que de ce qu'il m'a expliqué sa classe est + poussée que la mienne en terme de possibilités ?
ça n'est pas pour faire de l'ombre à OHGridView.. Laquelle correspond à d'autres besoins, moins complexe qu'une UITableView.
NRGridView fonctionne exactement comme UITableView, à quelques détails près (pas de deletion, accessoryView, ...).
Le plus par rapport à OHGridView c'est de pouvoir fonctionner avec des sections comme UITableView.
Bien sur, le composant évoluera en fonction des besoins de chacun.. Si vous vous donnez la peine de réclamer des fonctionnalités évidemment.
Je suppose qu'on peut setter le nombre de lignes et de colonnes, par section.
Petite question
Dans la méthode suivante
L'ancien _backgroundView n'est pas releasé, c'est normal ?
Non.. Je corrige ça ce soir ! Merci !
Je doute que celui d'Ali ait un pb de perfs.. bien que je n'ai pas regardé comment c'est foutu.. Mais avec NRGridView, sur un 3GS en utilisant le projet d'exemple (qui contient quand meme beaucoup de cellules visibles à l'écran, environ 22 au maximum?) ça lag très légèrement.. mais je pense avoir fait mon max tout en essayant de garder un code assez propre... essaie d'imaginer le fait d'afficher 22 lignes à l'écran avec une UITableView, ça donnera sans doute pareil je pense...
Il faut savoir que ça dépend aussi de l'optimisation que tu fais de ton côté quand tu rajoutes des trucs la cellule !
Sinon, non tu ne peux pas choisir le nombre de colones/lignes. En fait ça se fait tout seul comme un grand en fonction du -cellSize que tu auras choisi. Et faut pas être une lumière en maths pour déterminer la taille d'une cellule pour qu'il y en ait, par exemple, 3 par ligne /wink.png' class='bbc_emoticon' alt=';)' /> Tu mettras un cellSize de 106 de largeur au maximum ou 81 au minimum.
Mais ma question était plutôt de savoir si on pouvait faire une grille de 1 ligne fois X cells mais que seulement 2 cells soient visibles par exemple. Et donc que tu scrolles à droite pour voir les 10 autres cells non visibles.
ça a l'air de marcher nikel pour le scroll horizontal.
Par contre, pas de méthode selectCellAtIndexPath à ce que je vois ?
Imagine une grille de livres sur une étagère: "Montre moi le livre en position D12".
Si tu ajoutes cette fonction, ta classe sera meilleure que les 3 autres que j'ai déjà testées... (mets la pression)
ça serait le top !
Tu n'oublies rien !
(et donc cette feature n'est pas compatible avec une multi-sélection (ou alors faut faire un choix) ... mais je n'ai pas besoin de la multi sélection)
J'ai ajouté:
Je teste tout ça la semaine prochaine !
Visiblement, il fait des aller-retours entre les méthodes datasource MAIS ne rentre jamais dans la méthode - (NRGridViewCell*)gridView:(NRGridView *)aGridView cellForItemAtIndexPath:(NSIndexPath *)indexPath
Bizarre, bizarre.
Si tu veux éviter tout ce boulot je te conseille plutôt de faire une sous-classe de NRGridViewController comme il est fait dans l'exemple.
Mouais, et si tu veux un UIViewController qui contrôle une grille NRGridView ET une autre vue UIView par exemple, pourquoi partir sur un NRGridViewController et pas un UIViewController... ce qu'on peut faire avec OHGridView par exemple... ou même avec UITableView. /kiss.gif' class='bbc_emoticon' alt=':-*' />
1) Pourquoi tu veux mettre une frame ? La frame est déjà définie dans le Xib sur la NRGridView héritée de UIScrollView.
Dans ce cas là , je me contente de ceci qui marche parfaitement:
- (void)viewDidLoad
{
/color][color=#b9369d]super[/color][color=#000000] [/color]viewDidLoad[color=#000000;
self.gridView.delegate = self;
self.gridView.dataSource = self;
[/color][color=#b9369d]self[/color][color=#000000] [/color]gridView[color=#000000 setCellSize:CGSizeMake(176.0, 160.0)];
}
2) Maintenant, si on veut personnaliser l'init de la gridView, rien ne marche, même en settant la frame:
- (void)viewDidLoad
{
[super viewDidLoad];
self.gridView = [[[NRGridView alloc] initWithLayoutStyle:NRGridViewLayoutStyleVertical] autorelease];
self.gridView.frame = CGRectMake(...);
self.gridView.delegate = self;
self.gridView.dataSource = self;
[[self gridView] setCellSize:CGSizeMake(160.0, 80.0)];
[self.gridView reloadData];
}
Voilà où je voulais en venir.
1) Vérifie la frame de self.view
2) N'oublie pas de foutre un auto-resizing mask à la gridView!!.
Rien n'indique qu'au moment du viewDidLoad, la frame de self.view est la frame finale.
Si tu veux faire un bon layout, il te faut une méthode privée du genre "__layoutContent", comme fait UINavigationController pour bien replacer la navBar + viewController.view active.
En gros:
[/size][/font][/color]
[font=helvetica, arial, sans-serif]Là c'est le cas où la gridView prend toute la vue. Sinon il va vraiment falloir faire un __layoutContent ou un truc du genre, car rien ne dit que ta vue ne va pas démarrer avec une frame CGRectZero, pour ensuite être élargie automatiquement par son parentViewController (si il y a.)[/font]
[font=helvetica, arial, sans-serif]D'ailleurs tu ne devrais meme pas faire ça au viewDidLoad, mais au loadView, c'est plus clean de mon point de vue.[/font]
[font=helvetica, arial, sans-serif]Tu noteras que ça marche très bien depuis NRGridViewController (regarde le code), qui lui n'utilise pas de xib. Certes ça utilise -setView: mais il n'empêche que ça fonctionne. C'est juste que tu ne dois pas avoir l'habitude de gérer plusieurs vues manuellement dans une seule comme le fait UINavigationController et ses consoeurs.[/font]
[font=helvetica, arial, sans-serif]Sauf si, bien entendu, tu démarres avec un xib, où là a déjà une frame assez "conséquente" pour pouvoir placer tes éléments au moment où la vue se charge. Sans oublier un autoresizing mask évidemment /wink.png' class='bbc_emoticon' alt=';)' />[/font]
[font=helvetica, arial, sans-serif]Par contre, p-e que UITableView démarre avec un autoresizingMask flexible width/height par défaut, je ne sais pas.. Moi j'en ai pas mis par défaut sur ma NRGridView [/font]