UIdatepicker

JekarJekar Membre
21:06 modifié dans API UIKit #1
Je créer un datepicker comme ca :
maDate = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 245, 0, 0)];<br />	 maDate.autoresizingMask = UIViewAutoresizingFlexibleWidth;<br />	 maDate.datePickerMode = UIDatePickerModeDate;<br />	 [self.view addSubview:maDate];


Et ma question est,  comment lui affecter une fonction par exemple quand on change la date (valueChanged)?
Si je l avais cree avec IB je l aurais relié a l IBaction, mais la? je fais comment?

merci!!

Réponses

  • AliGatorAliGator Membre, Modérateur
    novembre 2008 modifié #2
    Utilise - (void)setAction:(SEL)aSelector et - (void)setTarget:(id)anObject de NSControl vont te permettre d'assigner l'action à  exécuter et le target auquel envoyer l'action


    [EDIT]Oups j'avais pas vu que c'était pour iPhone, dans ce cas c'est la doc de UIControl qui va t'intéresser plutôt, entre autres - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents ;)
  • JekarJekar Membre
    21:06 modifié #3
    Ok, une derniere question.
    C est possible de le mettre en francais sur le simulateur?
    J ai beau essayé avec "locale" rien a faire, ca m affiche les mois en anglais...
  • JekarJekar Membre
    21:06 modifié #4
    Grrr, et comment on fait pour comparer juste des dates???
    Dans NSdate la fonction isEqualToDate compare les dates mais aussi les heures, pas tres pratique.

    Y a une autre façon de faire?

    merci
  • AliGatorAliGator Membre, Modérateur
    21:06 modifié #5
    Les dates sont assez éparses en Cocoa : tu as les NSDates, les NSCalendarDates, les NSDateComponents... etc
    http://developer.apple.com/documentation/Cocoa/Conceptual/DatesAndTimes/DatesAndTimes.html

    Tu peux sans doute récupérer les NSDateComponents de ta date et les comparer, après avoir "annulé" le composant d'heure
    NSDate* date1 = ...<br />NSDate* date2 = ...<br /><br />NSCalendarUnits flags =&nbsp; NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;<br />NSDateComponents *diffCompos = [[NSCalendar currentCalendar] components:flags fromDate:date1 toDate:date2 options:0];<br />BOOL datesAreSameDay = ( ([diffCompos year]==0) &amp;&amp; ([diffCompos month]==0) &amp;&amp; ([diffCompos day]==0) );
    
    J'ai pas testé le code, à  vérifier mais bon tu vois l'idée.
  • JekarJekar Membre
    21:06 modifié #6
    ha oué, y pas un truc simple. :(
    Je vais essayé ca!

    merci
  • AliGatorAliGator Membre, Modérateur
    novembre 2008 modifié #7
    Ben c'est vrai qu'il faut décomposer, mais en même temps ça ne tient qu'en 3 lignes hein ! :)
    Alors que tu veux faire un truc "non standard", c'est à  dire ignorer certains composants de ta date (en l'occurrence l'heure, les minutes et les secondes) pour ta comparaison et ne comparer que certains autres composants...
    Tu peux toujours faire une catégorie de NSDate si tu veux rendre ça plus propre ;)

    Dans d'autres langages (d'ailleurs j'étais presque parti pour ça quand j'ai voulu te proposer la solution) c'est plus compliqué encore puisqu'il faut modifier chacune de tes dates pour mettre à  zéro les heures, minutes et secondes des deux dates avant de les comparer... pas méchant non plus mais tient en général en plus de lignes que ça ;)

    ---
    La "difficulté" tient du fait qu'on a tendance en fait à  ne voir que ja partie immergée de l'iceberg quand on se pose se genre de question : nous on se dit on veut juste savoir si deux dates sont le même jour, mais il faut penser qu'il y a des problématiques potentielles de fuseaux horaires (quid d'une date le 21/11/08 à  0h30 en GMT+1 à  comparer avec le 20/11/08 à  12h GMT+0 ? si tu ramènes tout à  l'heure GMT les dates finissent par être le même jour...), potentiellement même des problématiques de calendriers (quoique bien plus rare en général on raisonne avec le grégorien mais bon sait-on jamais)...

    Et puis après tu peux vouloir vérifier que c'est la même date quelle que soit l'heure, ou juste vérifier qu'elles n'ont pas plus de 24h d'écart... et ça n'est pas la même chose non plus, ça dépend de ce que tu veux... donc à  toi de coder en fonction de tes besoins ;)


    Par exemple si tu sais qu'une de tes deux dates (disons date1) n'a pas d'heure (enfin qu'elle est forcément à  0:00:00) car par exemple est retournée par ton UIDatePicker qui ne te permet de choisir que la date, tu peux simplifier et te contenter de vérifier que date2-date1<24h et du coup ça tient en une ligne :
    if ([date2 timeIntervalSinceDate:date1]&lt;24*60*60) ...
    
Connectez-vous ou Inscrivez-vous pour répondre.