Generer des dates afin d'afficher une vue calendaire

shebsheb Membre
08:58 modifié dans API AppKit #1
Bonjour a tous,

Ayant récemment terminé "Cocoa programming for mac os x", j'ai l'intention de me coder une petite appli pour me faire la main.

La première étape ne devrait pas etre tres compliquée, afficher une vue calendaire, de janvier à  decembre.

Comment feriez-vous pour generer ces 365 jours (et des brouettes) à  partir d'une année de départ ?

J'ai bien regardé NSDate, NSCalendar, NSCalendarDate et consors, mais je n'ai rien trouvé de tres pertinent.

Réponses

  • NoNo Membre
    08:58 modifié #2
    dans 1231254176:

    Comment feriez-vous pour generer ces 365 jours (et des brouettes) à  partir d'une année de départ ?

    Je n'ai pas tout compris, mais je pense en effet que NSCalendarDate est ton ami.

    Tu dois donc partir du 1/1/2009 (par exemple), donc un NSCalendarDate initialisé par un initWithYear:2009 month:1 day:1 hour:0 minute:0 second:0 timeZone:[NSTimeZone localTimeZone] pour commancer.

    Ensuite, pour chaque journée, tu peux récupérer le jour (méthode dayOfMonth), le mois (monthOfYear), le jour de la semaine (dayOfWeek), etc...

    Enfin, il faut passer à  la journée suivante par un dateByAddingYears:months:days:hours:minutes:seconds: en y ajoutant 1 journée, et ceci jusqu'à  changer d'année.
  • schlumschlum Membre
    08:58 modifié #3
    Comprend rien à  la question... Que veux tu faire de plus que ne fait la version "Graphical" de NSDatePicker ?
  • shebsheb Membre
    08:58 modifié #4
    dans 1231254942:

    Comprend rien à  la question... Que veux tu faire de plus que ne fait la version "Graphical" de NSDatePicker ?


    Je veux me créer une custom view qui m'affiche un calendrier, le même type de vue que dans iCal quand tu mets l'affichage en "Mois"
  • schlumschlum Membre
    08:58 modifié #5
    C'est trop flou... De quelle forme ? De manière à  pouvoir mettre des choses dedans ? ou juste un sélecteur ?
  • shebsheb Membre
    08:58 modifié #6
    dans 1231286315:

    De manière à  pouvoir mettre des choses dedans ?


    Oui c'est bien ca.
  • schlumschlum Membre
    08:58 modifié #7
    Donc en gros un truc de ce genre là , mais graphique avec des petites cases pour les jours ?

    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  2009<br /><br />&nbsp; &nbsp; &nbsp; Janvier&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Février&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Mars<br />Di Lu Ma Me Je Ve Sa&nbsp; Di Lu Ma Me Je Ve Sa&nbsp; Di Lu Ma Me Je Ve Sa<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  1&nbsp; 2&nbsp; 3&nbsp;  1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;  1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7<br /> 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10&nbsp;  8&nbsp; 9 10 11 12 13 14&nbsp;  8&nbsp; 9 10 11 12 13 14<br />11 12 13 14 15 16 17&nbsp; 15 16 17 18 19 20 21&nbsp; 15 16 17 18 19 20 21<br />18 19 20 21 22 23 24&nbsp; 22 23 24 25 26 27 28&nbsp; 22 23 24 25 26 27 28<br />25 26 27 28 29 30 31&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 29 30 31<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp;  Avril&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Mai&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Juin<br />Di Lu Ma Me Je Ve Sa&nbsp; Di Lu Ma Me Je Ve Sa&nbsp; Di Lu Ma Me Je Ve Sa<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1&nbsp; 2&nbsp; &nbsp; &nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6<br /> 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10 11&nbsp;  3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9&nbsp;  7&nbsp; 8&nbsp; 9 10 11 12 13<br />12 13 14 15 16 17 18&nbsp; 10 11 12 13 14 15 16&nbsp; 14 15 16 17 18 19 20<br />19 20 21 22 23 24 25&nbsp; 17 18 19 20 21 22 23&nbsp; 21 22 23 24 25 26 27<br />26 27 28 29 30&nbsp; &nbsp; &nbsp; &nbsp; 24 25 26 27 28 29 30&nbsp; 28 29 30<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 31&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; Juillet&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Août&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Septembre<br />Di Lu Ma Me Je Ve Sa&nbsp; Di Lu Ma Me Je Ve Sa&nbsp; Di Lu Ma Me Je Ve Sa<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  1&nbsp; &nbsp; &nbsp; &nbsp;  1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5<br /> 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10 11&nbsp;  2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp;  6&nbsp; 7&nbsp; 8&nbsp; 9 10 11 12<br />12 13 14 15 16 17 18&nbsp;  9 10 11 12 13 14 15&nbsp; 13 14 15 16 17 18 19<br />19 20 21 22 23 24 25&nbsp; 16 17 18 19 20 21 22&nbsp; 20 21 22 23 24 25 26<br />26 27 28 29 30 31&nbsp; &nbsp;  23 24 25 26 27 28 29&nbsp; 27 28 29 30<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 30 31&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  <br />&nbsp; &nbsp; &nbsp; Octobre&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Novembre&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Décembre<br />Di Lu Ma Me Je Ve Sa&nbsp; Di Lu Ma Me Je Ve Sa&nbsp; Di Lu Ma Me Je Ve Sa<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  1&nbsp; 2&nbsp; 3&nbsp;  1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; &nbsp; &nbsp; &nbsp;  1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5<br /> 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10&nbsp;  8&nbsp; 9 10 11 12 13 14&nbsp;  6&nbsp; 7&nbsp; 8&nbsp; 9 10 11 12<br />11 12 13 14 15 16 17&nbsp; 15 16 17 18 19 20 21&nbsp; 13 14 15 16 17 18 19<br />18 19 20 21 22 23 24&nbsp; 22 23 24 25 26 27 28&nbsp; 20 21 22 23 24 25 26<br />25 26 27 28 29 30 31&nbsp; 29 30&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  27 28 29 30 31
    

  • AliGatorAliGator Membre, Modérateur
    08:58 modifié #8
    Je pense qu'il ne veut qu'un mois à  la fois.
    - Donc moi je créerais une Custom View représentant une case d'un jour (disons MonthDayView), avec entre autres un constructeur de commodité du genre [tt]+(MonthDayView*)monthDayViewWithDate:(NSCalendarDate*)date[/tt], pour pouvoir créer facilement une "case" pour un jour donné.
    - Ensuite, pour créer la vue du mois complet, il suffit de créer une autre customView "MonthView", avec un constructeur de commodité du genre [tt]+(MonthView*)monthViewWithMonth:(int)month andYear:(int)year[/tt], qui se chargerait de construire une NSCalendarDate avec l'année et le mois fourni (et le quantième du jour à  1, les heures à  zéro), puis de boucler en créant une MonthDayView pour cette NSCalendarDate, le positionnant (en tant que subview de ta MonthView) au bon endroit automatiquement, puis ajoute un jour à  la NSCalendarDate, et continue à  boucler jusqu'à  ce que le mois de la NSCalendarDate ait changé.

    Voilà  c'est qu'une façon de faire parmi d'autres, mais ça confirme que le plus simple est de passer par des NSCalendarDate puisqu'on peut alors en plus facilement incrémenter d'un jour en un jour, et tester que le mois a changé ou pas.
Connectez-vous ou Inscrivez-vous pour répondre.