[Résolu] UIPickerView - modulation des data

2»

Réponses



  • Alors je remet en question toute ton architecture mais des fois c'est quand même bon. Tu utilises un Picker pour 1500 lignes ça me parait un peu dur pour l'utilisateur ça fait des scroll long pour aller vers le fond et c'est pas forcement simple de récupérer la bonne ligne. 


     


    Pourquoi tu créer pas une recherche avec un UISearchBar qui apparaitrai ou pas suivant la demande ça permettrais à  l'utilisateur de faire une recherche sur l'élément voulu et à  ne pas avoir a scroller comme un fou.


     


    Enfin ça c'est ton choix c'est juste que ça pourrait éventuellement (c'est pas vraiment sur suivant ce que tu veux) améliorer un peu l'érgonomie. 


     


    Pour être honnête ça entraine beaucoup de modification et ça ne correspondra pas forcement ça ce que tu veux c'est plus une proposition.


     


    Pour le bug jpimber te conseil le viewDidLoad je suis d'accord avec lui as tu essayé?


     


    Cependant si tu veux que ça se fasse à  chaque "ouverture" de l'application le viewDidLoad n'est pas forcement la meilleur solution. En effet cette fonction ne sera pas appelé si l'application passe en background et revient en foreground sans être "killé" .


     


    Dans l'appDelegate tu as des fonctions pour notifier que ton application sors de son état de "sommeil" tu peux aussi plancher sur ça.


    Une fonction comme le "applicationDidBecomeActive" peut être une bonne solution je penses.




    Merci pour ces précisions architecturales.


    Je vais réduire mes listes de modèles, en effet le calcul de l'hyperfocale me semble plus adapté au appareil type reflex que compact, ce qui devrait réduire considérablement les listes par marques et me permettre de conserver l'option pickerview.


     


    Comme conseillé j'ai tenté de mettre ce code :


    NSUserDefaults *defaultsPickerMarque = [NSUserDefaults standardUserDefaults];


        monPickerApn = [defaultsPickerMarque objectForKey:@pickerMarque] ;


        NSUserDefaults *defaultsPickerModele = [NSUserDefaults standardUserDefaults];


        monPickerApn = [defaultsPickerModele objectForKey:@pickerModele] ;


     


    dans la méthode - (void)applicationDidBecomeActive:(UIApplication *)application


     


    Cependant, bien qu'ayant fait un #import "MyView.h"


    j'ai un message d'erreur qui m'indique que "use of undeclared identifier "monPickerApn"


     


    A force de tournicoté, je fini par plus rien comprendre.


    Qu'ai-je encore loupé ???

  • Joanna CarterJoanna Carter Membre, Modérateur

    Bonjour


     




    Je vais réduire mes listes de modèles, en effet le calcul de l'hyperfocale me semble plus adapté au appareil type reflex que compact, ce qui devrait réduire considérablement les listes par marques et me permettre de conserver l'option pickerview.




     


    On t'as déjà  conseillé, n'utilise pas pickerview, même pour les listes plus petites.


     




    Comme conseillé j'ai tenté de mettre ce code :


    NSUserDefaults *defaultsPickerMarque = [NSUserDefaults standardUserDefaults];


        monPickerApn = [defaultsPickerMarque objectForKey:@pickerMarque] ;


        NSUserDefaults *defaultsPickerModele = [NSUserDefaults standardUserDefaults];


        monPickerApn = [defaultsPickerModele objectForKey:@pickerModele] ;


     


    dans la méthode - (void)applicationDidBecomeActive:(UIApplication *)application


     


    Cependant, bien qu'ayant fait un #import "MyView.h"


    j'ai un message d'erreur qui m'indique que "use of undeclared identifier "monPickerApn"




     


    Si tu veux affecter la liste dans un viewcontroller, il faut mettre le code dans le viewcontroller qui gère la liste. Peut-être dans la méthode viewDidLoad, viewWillAppear ou viewDidAppear, selon ce qu'il faut.


  • Après moult pérégrinations je suis parvenue au résultat que je souhaitais.


    Merci encore pour vos conseils


     


  • Joanna CarterJoanna Carter Membre, Modérateur
    novembre 2014 modifié #35


    Après moult pérégrinations je suis parvenue au résultat que je souhaitais.




     


    Pour ceux qui trouvent la même problème, c'était quoi ta solution ?


  • Il fallait placer le code pour récupérer le NSUserDefaults dans la méthode -(id)initWithFrame:(CGRect)frame du le fichier d'implémentation de la vue où est codé le UIPickerView.  ::)

  • Joanna CarterJoanna Carter Membre, Modérateur

    N'utilises pas -initWithFrame: comme ça. Cette méthode n'est pas appelé si la vue est créé d'un storyboard ou un xib, seulement lorsque tu crées la vue en code.


  • Dans ma première approche cela était le cas.


    J'aurais du mieux réfléchir à  l'architecture avant de partir tout de go  ???


  • Et au passage pourrais tu mettre des balises "code" lorsque tu mets des lignes de code dans tes messages, ce sera plus lisible...


  • Et au passage pourrais tu mettre des balises "code" lorsque tu mets des lignes de code dans tes messages, ce sera plus lisible...




     


    Oki ;-)


     


    Comment faut faire ?

  • Tu cliques sur le petit icône "<>" qui te permet d'insérer du code, tu auras une fenêtre qui va s'ouvrir, où il te suffira de coller ton code. Celui-ci sera formaté automatiquement.


    Passe la souris au dessus des différents icônes, çà  te permettra de savoir à  quoi servent chacun d'eux ("insérer du code", "insérer un lien",...)


Connectez-vous ou Inscrivez-vous pour répondre.