Date Picker

RocouRocou Membre
10:49 modifié dans API AppKit #1
Bonjour,

J'ai ajouté un objet "Calendar Date Picker" sur mon interface. Je l'ai lié à  un objet de type "Text Field" et ainsi de façon automatique, la date choisie par un clic dans mon objet DatePicker, apparaà®t dans mon Text Field.
(J'ai choisi un peu au hasard l'action "TakeObjectValueFrom" au moment du lien entre mes deux objets...)

Mon souci est que le format de la date affichée ne me convient pas du tout. J'imagine que plutôt que d'envoyer directement les données à  l'affichage, celles-ci doivent passer dans mon "contrôleur" afin d'être formatées et renvoyées vers le TextField.

Mais en pratique, comment faire? Je n'y arrive pas du tout.

Réponses

  • schlumschlum Membre
    10:49 modifié #2
    Il faut lier le NSDatePicker à  une action du contrôleur...
    Ensuite, dans cette action, récupérer la date, la formater et la faire afficher dans le champ.
  • AntilogAntilog Membre
    10:49 modifié #3
    Ajouter un NSFormatter à  la NSTextField?
  • RocouRocou Membre
    10:49 modifié #4
    dans 1224498191:

    Il faut lier le NSDatePicker à  une action du contrôleur...
    Ensuite, dans cette action, récupérer la date, la formater et la faire afficher dans le champ.

    Oui, c'est ce que j'ai tenté de faire mais je sèche sur la façon de faire afficher cette date dans le champ.
    -J'ai codé (copier/coller plutôt...) une action:

    // -------------------------------------------------------------------------------<br />//	updateDateResult:<br />// -------------------------------------------------------------------------------<br />- (void)updateDateResult<br />{<br />	NSDate* theDate = [datePickerControl dateValue];<br />	if (theDate)<br />	{<br />		NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];<br />		<br />		NSString* formattedDateString;<br />		<br />		[formatter setDateStyle:NSDateFormatterShortStyle];<br />		[formatter setTimeStyle:NSDateFormatterNoStyle];<br />		formattedDateString = [formatter stringFromDate:theDate];<br />		[dateresult setStringValue: formattedDateString];<br />		}<br />}<br /><br /><br />// -------------------------------------------------------------------------------<br />//	datePickerAction:sender:<br />//<br />//	The user interacted with the date picker control so update the date/time examples.<br />// -------------------------------------------------------------------------------<br />- (IBAction)datePickerAction:(id)sender<br />{<br />	[self updateDateResult];<br />}<br />
    


    J'ai lié mon objet DatePicker à  mon contrôleur en choisissant l'action datePickerAction.
    J'ai déclaré un outlet (IBOutlet NSTextField* dateresult;)

    Mais ensuite, que dois-je faire? Comment lier cet outlet à  mon champ?
  • RocouRocou Membre
    10:49 modifié #5
    dans 1224500023:

    Ajouter un NSFormatter à  la NSTextField?

    Intuitivement, ça me semble être une bonne idée mais comment faire cela?  :why?:
  • schlumschlum Membre
    10:49 modifié #6
    dans 1224500853:

    Mais ensuite, que dois-je faire? Comment lier cet outlet à  mon champ?


    De la même manière qu'on lie un objet au contrôleur pour l'action, sauf que c'est dans le sens inverse !
  • RocouRocou Membre
    octobre 2008 modifié #7
    dans 1224503878:

    dans 1224500853:

    Mais ensuite, que dois-je faire? Comment lier cet outlet à  mon champ?


    De la même manière qu'on lie un objet au contrôleur pour l'action, sauf que c'est dans le sens inverse !

    C'est que je pense avoir fait mais cela n'a aucun effet sur l'affichage.
    Pour être sûr: tu pars du cube bleu représentant le contrôleur vers le champ et dans la liste qui s'affiche, tu choisi le bon outlet?


    EDIT: bon, les liens ne sont pas en cause, c'est mon action qui n'est pas bonne. En modifiant mon action en mettant
    return [dateresult setStringValue:@toto];, "toto" s'affiche correctement dans mon champ quand je clique sur le objet DatePicker.

    Ma question est donc: comment récupérer dans mon action la valeur envoyée par l'objet DatePicker?
    Dans le code de mon action, je fais ceci:
    NSDate* theDate = [datePickerControl dateValue];
    if (theDate)
    {...}

    theDate est à  nil.

    J'ai bien déclaré NSDatePicker* datePickerControl;
    mais comment faire pour "lier" mon objet DatePicker à  cette déclaration?

  • schlumschlum Membre
    10:49 modifié #8
    Avec un outlet, de la même manière que tu as fait pour le champ !
  • RocouRocou Membre
    10:49 modifié #9
    dans 1224508855:

    Avec un outlet, de la même manière que tu as fait pour le champ !

    ???

    Mon DatePicker est déjà  relié à  mon contrôleur. J'ai choisi une action. C'est dans cette action que je dois récupérer la valeur envoyée par le DatePicker. Mais comment?
  • schlumschlum Membre
    10:49 modifié #10
    dans 1224511941:

    dans 1224508855:

    Avec un outlet, de la même manière que tu as fait pour le champ !

    ???

    Mon DatePicker est déjà  relié à  mon contrôleur. J'ai choisi une action. C'est dans cette action que je dois récupérer la valeur envoyée par le DatePicker. Mais comment?


    Il est lié dans le sens action, c'est pas pour autant qu'il est lié dans le sens outlet !

    Mais c'est vrai que tu peux aussi le récupérer au niveau de l'action, puisque c'est l'argument "sender".
  • RocouRocou Membre
    10:49 modifié #11
    dans 1224512933:

    dans 1224511941:

    dans 1224508855:

    Avec un outlet, de la même manière que tu as fait pour le champ !

    ???

    Mon DatePicker est déjà  relié à  mon contrôleur. J'ai choisi une action. C'est dans cette action que je dois récupérer la valeur envoyée par le DatePicker. Mais comment?


    Il est lié dans le sens action, c'est pas pour autant qu'il est lié dans le sens outlet !

    Mais c'est vrai que tu peux aussi le récupérer au niveau de l'action, puisque c'est l'argument "sender".

    Je te remercie pour tes réponses mais elles sont trop succinctes pour moi.
  • AliGatorAliGator Membre, Modérateur
    10:49 modifié #12
    Ca vous dit vraiment pas la solution du NSDateFormatter ??
    Juste faire glisser, dans IB, le DateFormatter sur ton NSTextField, et basta, pas une ligne de code à  faire. Non ?
  • schlumschlum Membre
    10:49 modifié #13
    dans 1224522398:

    Je te remercie pour tes réponses mais elles sont trop succinctes pour moi.


    Ben là  apparemment ton objet "datePickerControl" vaut "nil"... Normal, il n'est pas initialisé.
    Fais en un NSOutlet, et connecte le dans Interface Builder comme tu as connecté le champ !
    C'est pas sorcier  ???

    Sinon, la solution simple oui, mettre directement un NSDateFormatter dans IB ; mais il faut quand même que tu saches faire une connexion outlet / action dans les 2 sens entre un contrôleur et un objet ; c'est la base  ;)
  • RocouRocou Membre
    10:49 modifié #14
    dans 1224522772:

    Ca vous dit vraiment pas la solution du NSDateFormatter ??
    Juste faire glisser, dans IB, le DateFormatter sur ton NSTextField, et basta, pas une ligne de code à  faire. Non ?

    Oui, je te remercie, c'est très bien mais j'aimerais tout même savoir comment récupérer la valeur émise par mon date picker, la manipuler et transmettre le résultat à  un champ.

    Ce que je ne comprends pas, c'est que cette valeur est très bien transmise à  mon champ quand je lie mon datepicker directement au champ mais quand je le lie à  mon contrôleur, je n'arrive pas à  la récupérer, elle est égale à  nil.

    @schlum: Excuse moi mais je ne comprends rien du tout. J'ai l'impression que nous ne parlons pas de la même chose
  • CéroceCéroce Membre, Modérateur
    10:49 modifié #15
    Tes questions n'ont aucun sens, il faut que tu reprennes les bases:
    http://developer.apple.com/documentation/Cocoa/Conceptual/ObjCTutorial/01Introduction/chapter_1_section_1.html

    Tu y apprendras ce que sont les "actions" et les "outlets" et comment on tire les liens sous Interface Builder.
  • schlumschlum Membre
    10:49 modifié #16
    dans 1224575685:

    @schlum: Excuse moi mais je ne comprends rien du tout. J'ai l'impression que nous ne parlons pas de la même chose


    On va peut-être y arriver...
    Pour la troisième fois :
    J'ai bien déclaré NSDatePicker* datePickerControl;


    Ce qu'il faut déclarer, c'est :
    IBOutlet NSDatePicker* datePickerControl;
    


    Puis mettre à  jour dans IB (avec glisser&déposer ou à  partir du menu...)
    Et faire le lien d'outlet exactement comme ça a été fait avec le champ !!!

    Sinon, comment veux-tu qu'il soit connecté à  ton sélecteur de date ? magie ??
Connectez-vous ou Inscrivez-vous pour répondre.