NRGridView

2

Réponses

  • muqaddarmuqaddar Administrateur
    J'ai compris.

    J'effaçais la frame de mon XIB en redéfinissant NRGridView, ça je le savais.



    Il fallait non seulement ajouter la frame, mais aussi un addSubview de NRGridView (en fait, je peux virer l'outlet, il sert plus à  rien).



    Donc, au passage, le NRGridViewLayoutStyleHorizontal marche parfaitement. image/thumbsup.gif' class='bbc_emoticon' alt='' /> image/thumbsup.gif' class='bbc_emoticon' alt='' /> image/thumbsup.gif' class='bbc_emoticon' alt='' />





    - (void)loadView

    {

    /color][color=#b9369d]super[/color][color=#000000] [/color]loadView[color=#000000;




    self.gridView = [[/color][color=#4f8085]NRGridView[/color][color=#000000] [/color][color=#3f277d]alloc[/color][color=#000000 initWithLayoutStyle:NRGridViewLayoutStyleHorizontal] autorelease];


    /color][color=#b9369d]self[/color][color=#000000].[/color][color=#6f43a4]view[/color][color=#000000] [/color]addSubview[color=#000000]:[/color][color=#b9369d]self[/color][color=#000000].[/color][color=#4f8085]gridView[/color][color=#000000;


    #ifdef TARGET_OS_PAD


    self.gridView.frame = CGRectMake(0.0, 20.0, 704.0, 80.0);

    [/color][color=#b9369d]self[/color][color=#000000] [/color]gridView[color=#000000 setCellSize:CGSizeMake(176.0, 80.0)];


    #endif


    }



    Question:



    1) De mémoire, UITableViewCell autoresize les images des backgroundViews. Là , ça ne le fait pas. C'est à  dire que si on met une image plus grande dans une cell, elle monte sur la cell suivante. Où faut-il ajouter un autoresize mask dans ton code pour forcer ce comportement ?



    2) Je te fais des tests de perfs cette semaine.
  • février 2012 modifié #33
    Non il faut rajouter [cell setClipsToBounds:YES]; mais c'est autre chose.

    Je modifierai le layoutSubviews de la NRGridViewCell, car de mémoire ça prend la taille de l'image, mais je n'ai pas le souvenir d'avoir géré le fait que l'image soit plus grande que la contentView ! Je fais une modification ce soir si c'est bien ça le blem.
  • février 2012 modifié #34
    C'est corrigé.

    Je viens aussi de rajouter le support des footer/section.

    J'ai aussi modifié le comportement du scrollRectToSection:animated:scrollPosition. En passant NRGridViewScrollPositionAtBottom/Right on scroll maintenant au bas (ou à  droite) de la section. Auparavant ça affichait juste un morceau de la section en bas (ou à  droite) de l'écran.. pas très glorieux image/biggrin.png' class='bbc_emoticon' alt=':D' />
  • muqaddarmuqaddar Administrateur
    Je vais regarder ça.



    Cet aprem, j'ai bien réussi à  sélectionner une cellule non visible mais il faut scroller pour la voir sélectionnée. Le scroll n'est pas automatique lorsque l'on sélectionne une cellule cachée ? Ce sont 2 choses différentes ?
  • Non il faut que tu utilises la méthode unifiée:
    <br />
    [color=#5a80a7]<br />
    [color=#000000][[[/color][color=#385789]self[/color][color=#000000] [/color]gridView[color=#000000]] [/color]selectCellAtIndexPath[color=#000000]:[[/color][color=#c05710]NSIndexPath[/color][color=#000000] [/color]indexPathForItemIndex[color=#000000]:itemIndex [/color]inSection[color=#000000]:sectionIndex] [/color][/color]<br />
                                    [color=#5a80a7]autoScroll[/color]:[color=#385789]YES[/color][color=#5a80a7]<br />
    [color=#000000]                            [/color]scrollPosition[color=#000000]:[/color]NRGridViewScrollPositionAtMiddle[/color]<br />
                                      [color=#5a80a7]animated[/color]:[color=#385789]YES[/color]];<br />
    
  • muqaddarmuqaddar Administrateur
    Marche du tonnerre de feu de dieu !



    Faut faire connaà®tre ta classe, elle va faire un malheur. image/cheer.gif' class='bbc_emoticon' alt=' <3 ' />
  • Bah, vas-y ! image/biggrin.png' class='bbc_emoticon' alt=':D' />
  • Hello,



    Merci pour cette petite classe bien sympathique.

    As-tu prévu un portage sous OS X? se serait parfait image/smile.png' class='bbc_emoticon' alt=':)' />
  • CéroceCéroce Membre, Modérateur
    Pour quoi faire? NSTableView gère déjà  les lignes et colonnes.
  • NSTableView n'a pas le même principe qu'une présentation en mosaique. Mais pourquoi n'utilises-tu pas NSCollectionView??
  • NSCollectionView c'est pas le top quand même...
  • Bha si.. c'est le meme principe qu'une UITableView ou que NRGridView. 1cellule = 1 view..

    Alors que NSTableView ne se base que sur du 100% drawing via NSCell.
  • 'AP' a écrit:


    NSCollectionView c'est pas le top quand même...




    Tu as un contrôle open source équivalent 'JUCollectionView'



    voir ici http://cocoacontrols.com/platforms/mac-os-x/controls/jucollectionview
  • NSCollectionView charge toutes les vues, c'est vrai que c'est pas top.. mais bon sur un Mac c'est pas vraiment dérangeant..
  • mars 2012 modifié #46
    Hello,



    NRGridView a été mis à  jour et rajoute le support d'un appui long sur n'importe quelle cellule.






    Added
    • Long pressure gesture recognition if the appropriate delegate method is implemented by your controller:


    [font=Helvetica, arial, freesans, clean, sans-serif]- (void)gridView:(NRGridView*)gridView didLongPressCellAtIndexPath:(NSIndexPath*)indexPath;[/font]
    • Long pressure options for automatic un-highlight of the pressured cell. Available options can be combined together:


    [font=Helvetica, arial, freesans, clean, sans-serif]typedef enum{[/font]

    [font=Helvetica, arial, freesans, clean, sans-serif]NRGridViewLongPressUnhighlightUponPressGestureEnds = 0x01, // Un-highlights the cell when the user's finger lefts the screen[/font]

    [font=Helvetica, arial, freesans, clean, sans-serif]NRGridViewLongPressUnhighlightUponScroll = 0x02, // Un-highlights the cell when the user scrolls the gridView.[/font]

    [font=Helvetica, arial, freesans, clean, sans-serif]NRGridViewLongPressUnhighlightUponAnotherTouch = 0x04 // Un-highlights the cell when the user touches the same or another cell[/font]

    [font=Helvetica, arial, freesans, clean, sans-serif]} NRGridViewLongPressUnhighlightOptions;[/font]

    Fixed
    • Arithmetic crashes


    Improved
    • Calling -setCellSize: now automatically refreshes the gridView







    Et un petit exemple de l'implémentation dans un gridViewController:
    <br />
    <br />
    - (void)viewDidLoad<br />
    {<br />
    [super viewDidLoad];<br />
    [[self gridView] setLongPressOptions:[color=#999988](NRGridViewLongPressUnhighlightUponScroll|NRGridViewLongPressUnhighlightUponAnotherTouch)];[/color]<br />
    }<br />
    <br />
    <br />
    <br />
    [size=3][size=3][b]-[/b][/size] [size=3]([/size][color=#445588][size=3][b]void[/b][/size][/color][size=3])[/size][color=#990000][size=3][b]gridView:[/b][/size][/color][size=3]([/size][size=3]NRGridView[/size] [size=3][b]*[/b][/size][size=3])[/size][color=#008080][size=3]gridView[/size][/color] [color=#990000][size=3][b]didLongPressCellAtIndexPath:[/b][/size][/color][size=3]([/size][size=3]NSIndexPath[/size] [size=3][b]*[/b][/size][size=3])[/size][color=#008080][size=3]indexPath[/size][/color][/size]<br />
    [size=3][size=3]{[/size][/size]<br />
    [size=3]	[size=3]UIMenuController[/size][size=3][b]*[/b][/size] [size=3]menuController[/size] [size=3][b]=[/b][/size] [size=3][[/size][size=3]UIMenuController[/size] [size=3]sharedMenuController[/size][size=3]];[/size][/size]<br />
    [size=3]	[size=3]NRGridViewCell[/size][size=3][b]*[/b][/size] [size=3]cell[/size] [size=3][b]=[/b][/size] [size=3][[/size][size=3]gridView[/size] [size=3]cellAtIndexPath:[/size][size=3]indexPath[/size][size=3]];[/size][/size]<br />
    <br />
    [size=3]	[size=3][[/size][size=3]self[/size] [size=3]becomeFirstResponder[/size][size=3]];[/size][/size]<br />
    [size=3]	[[/size][size=3]menuController[/size] [size=3]setMenuItems:[/size][size=3][[/size][size=3]NSArray[/size] [size=3]arrayWithObject:[/size][size=3][[[[/size][size=3]UIMenuItem[/size] [size=3]alloc[/size][size=3]][/size] [size=3]initWithTitle:[/size][color=#DD1144][size=3]@&quot;Hooorayyyy&#33;&quot;[/size] [/color][size=3][size=3]action:[/size][size=3][b]@selector[/b][/size][size=3]([/size][size=3]hoorayTouched:[/size][size=3])][/size] [size=3]autorelease[/size][size=3]]]];[/size][/size]<br />
    [size=3]	[size=3][[/size][size=3]menuController[/size] [size=3]setTargetRect:[/size][size=3][[/size][size=3]cell[/size] [size=3]frame[/size][size=3]][/size][/size]<br />
    [size=3]						   [size=3]inView:[/size][size=3][[/size][size=3]self[/size] [size=3]view[/size][size=3]]];[/size][/size]<br />
    [size=3]	[/size]<br />
    [size=3]	[size=3][[/size][size=3]menuController[/size] [size=3]setMenuVisible:[/size][size=3]YES[/size] [size=3]animated:[/size][size=3]YES[/size][size=3]];[/size][/size]<br />
    [size=3]	[/size]<br />
    [size=3][size=3]}[/size][/size]<br />
    <br />
    [size=3][color=#999999][size=3][b]#pragma mark - UIMenuController Actions[/b][/size][/color][/size]<br />
    <br />
    [size=3][size=3][b]-[/b][/size] [size=3]([/size][color=#445588][size=3][b]void[/b][/size][/color][size=3])[/size][color=#990000][size=3][b]hoorayTouched:[/b][/size][/color][size=3]([/size][color=#445588][size=3][b]id[/b][/size][/color][size=3])[/size][color=#008080][size=3]sender[/size][/color][/size]<br />
    [size=3][size=3]{[/size][/size]<br />
    [size=3]	[size=3][[[/size][size=3]self[/size] [size=3]gridView[/size][size=3]][/size] [size=3]unhighlightPressuredCellAnimated:[/size][size=3]YES[/size][size=3]];[/size][/size]<br />
    [size=3][size=3]}[/size][/size]<br />
    <br />
    [size=3][size=3][b]-[/b][/size] [size=3]([/size][color=#445588][size=3][b]BOOL[/b][/size][/color][size=3])[/size][color=#990000][size=3][b]canPerformAction:[/b][/size][/color][size=3]([/size][color=#445588][size=3][b]SEL[/b][/size][/color][size=3])[/size][color=#008080][size=3]action[/size][/color] [color=#990000][size=3][b]withSender:[/b][/size][/color][size=3]([/size][color=#445588][size=3][b]id[/b][/size][/color][size=3])[/size][color=#008080][size=3]sender[/size][/color][/size]<br />
    [size=3][size=3]{[/size][/size]<br />
    [size=3]	[size=3][b]return[/b][/size] [size=3]([/size][size=3]action[/size] [size=3][b]==[/b][/size] [size=3][b]@selector[/b][/size][size=3](hoorayTouched[/size][size=3]:[/size][size=3]));[/size][/size]<br />
    [size=3][size=3]}[/size][/size]<br />
    [size=3][size=3]
    
    [/size][/size]
  • muqaddarmuqaddar Administrateur
    Très belle évolution, ça peut être utile. Bravo.
  • Ah et je viens encore de corriger quelques "weird bugs". Comme quoi ça sert que ce composant soit utilisé pour pleins de choses...
  • APAP Membre
    Bon,



    Je viens de jouer un peu avec ton control. Il est bien sympa mais je me suis surpris à  rêver de certaines fonctionnalités:

    - Avoir un mode avec une cellule faisant toute la largeur de la vue mais avec plusieurs colonne (comme une grille avec sections)

    - Avoir une seule ligne par section (si plus d'items que possible, les avoir en coverflow)



    Oui je sais, ce ne sont pas forcément les choses les plus triviales image/smile.png' class='bbc_emoticon' alt=':)' />
  • yass_1988yass_1988 Membre
    mai 2012 modifié #50
    Bonjour,



    j'ai une question concernant NRGridView, je me demandais s'il étais possible de faire de la sélection multiple, à  défaut de
    gridView:didSelectCellAtIndexPath:
    et
    gridView:didLongPressCellAtIndexPath:


    qui ne permettent de gérer que la sélection simple.
  • Tu peux te servir du simple didSelectCellAtIndexPath pour faire de la sélection multiple.
  • Comment cela ?

    Quand je fais un simple clique sur une cellule et ensuite pareil sur une autre, la sélection d'avant s'efface.
  • La selection multiple est possible si tu t'amuses à  la rajouter.. image/biggrin.png' class='bbc_emoticon' alt=':D' />

    Mais ça ne devrait pas tarder à  arriver (Septembre au plus tard), car je vais avoir besoin d'implémenter l'édition, et donc selection multiple.
  • yass_1988yass_1988 Membre
    mai 2012 modifié #54
    Aà¯e !!!!

    Et donc pas possible pour le moment de gérer la sélection multiple ?

    image/crybaby.gif' class='bbc_emoticon' alt=' :'( ' />
  • ça dépend, tu peux très bien gérer un mode édition dans ton viewController, et faire en sorte d'ajouter les indexPath de chacune des lignes sélectionnées (cf ce que t'as expliqué Ceetix) dans une array uniquement si [self isEditing] est vrai (un UIViewController possède une property 'editing').



    En soit, c'est pas bien compliqué, c'est juste chiant effectivement de devoir le gérer comme ça alors que le composant pourrait le faire, mais bon on a bien du attendre iOS 5.0 pour que UITableView puisse le faire alors ne nous plaignons pas image/smile.png' class='bbc_emoticon' alt=':)' />
  • Et avec le mode édition dans mon viewController, est ce que la sélection précédente dans ma vue (pas dans le array) s'efface de ma vue ?

    Je sais je suis chiant image/tongue.png' class='bbc_emoticon' alt=':P' />
  • Oui, mais là  faut modifier NRGridView image/smile.png' class='bbc_emoticon' alt=':)' />
  • image/baby.gif' class='bbc_emoticon' alt=' :o ' />
  • muqaddarmuqaddar Administrateur
    septembre 2012 modifié #59
    Salut,



    Je n'arrive pas à  mettre en évidence une cellule de NRGridView avec:


    [[self gridView] selectCellAtIndexPath:indexPath autoScroll:YES scrollPosition:NRGridViewScrollPositionAtMiddle animated:YES];
    




    Je confirme que ce code m'amène bien au bon endroit dans la grille, donc cette méthode a l'air de marcher, mais la cellule ne s'illumine pas avec le selectedBackground.



    Qu'est-ce-que j'aurais pu oublier pour que ça marche ?



    EDIT: sachant que mon selectionBackgroundView est bien défini:




    cell.selectionBackgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@&quot;bgcell-grid-wood-selected-160.png&quot;]] autorelease];
    
  • À quel moment tu le fais ? Dans le -viewDidAppear: ça marche très bien chez moi. Mais pas dans le -viewWillAppear:. La raison est simple, au moment du viewWillAppear:, la NRGridViewController déselectionne les cellules précédemment sélectionnées..

    Je vais rajouter une propriété (comme UITableView) permettant d'activer ou non ce comportement.
  • C'est bon. J'ai rajouté la propriété, et du coup j'ai déplacé le code de déselection dans -viewWillAppear: plutôt que -viewDidAppear: (je trouvais ça mieux à  la base car on avait bien le temps de voir la désélection dans un contexte animé, mais ça peut éventuellement poser problème pour certains image/biggrin.png' class='bbc_emoticon' alt=':D' />)
Connectez-vous ou Inscrivez-vous pour répondre.