2015-12-03 1 views
1

Ici, j'ai utilisé une étiquette pour afficher le mois en cours avec l'année. et il a un bouton sur le côté pour passer au mois précédent. Lorsque l'utilisateur appuie sur le bouton latéral, il doit afficher le mois précédent.afficher le nom et l'année du mois précédent

Je n'ai fait que montrer le mois présent. mais pas en mesure de se déplacer et afficher le mois précédent dans la même étiquette.

NSDate *date = [NSDate date]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[email protected]"MMMM"; 
NSString * monthString = [[dateFormatter stringFromDate:date] capitalizedString]; 
[email protected]"yyyy"; 
NSString * yearString = [[dateFormatter stringFromDate:date] capitalizedString]; 
datelabel.text = [NSString stringWithFormat:@"%@ %@",monthString,yearString]; 

Voici mon bouton méthode de presse:

- (IBAction)leftBtn:(id)sender { 
} 

- (IBAction)rightBtn:(id)sender { 
} 

donc à normal, quand view load il devrait afficher December, 2015. Et lorsque l'utilisateur appuie sur leftbutton, datelabel doit afficher november,2015. Et aussi quand l'utilisateur appuient sur right button de november month il devrait afficher december, 2015

Je suis très confus. S'il vous plaît aidez-moi à résoudre, c'est ma première question. Aidez-moi.Merci!

+0

Je vous recommande d'utiliser 'NSDateComponents' (à partir de la date actuelle, puis -1 mois à elle) pour obtenir le mois précédent «NSDate». – Larme

Répondre

0

Vous devez utiliser NSDateComponents

- (IBAction)rightBtn:(id)sender 
{ 

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"MMMM yyyy"]; 
    NSDate *tempDate = [dateFormat dateFromString:datelabel.text]; 

    NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
    [dateComponents setMonth:1]; 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDate *newDate = [calendar dateByAddingComponents:dateComponents toDate:tempDate options:0]; 

    datelabel.text = [dateFormat stringFromDate:newDate]; 

} 

et la même chose pour le bouton gauche

- (IBAction)leftBtn:(id)sender 
{ 

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"MMMM yyyy"]; 
    NSDate *tempDate = [dateFormat dateFromString:datelabel.text]; 

    NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
    [dateComponents setMonth:-1]; 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDate *newDate = [calendar dateByAddingComponents:dateComponents toDate:tempDate options:0]; 

    datelabel.text = [dateFormat stringFromDate:newDate]; 
} 
+0

ohh man impressionnant mouvement. Merci d'aider, bien sûr, cela m'aidera à apprendre. – joseph

+0

Ne pas convertir en arrière et en avant du texte de vue, c'est une conception terrible et l'architecture – Wain

+0

une question de plus, dans mon message ci-dessus. J'ai entré du code dans la vue a fait charger. ça fonctionne bien. que mon code viewdidload est correct ou que je devrais changer. – joseph

0

Utilisez une variable d'instance pour stocker la date actuelle. Lorsque la vue est chargée, réglez-la sur [NSDate date]. Mettez à jour votre code actuel afin qu'il puisse être exécuté à tout moment et utilise la variable d'instance date pour mettre à jour les étiquettes. Changez le code d'installation pour obtenir la date actuelle et utilisez NSDateComponents pour supprimer le jour et l'heure de la date. La date d'enregistrement dans la variable d'instance correspond donc au premier jour du mois. Test pour s'assurer que cela fonctionne et regarde la même chose pour l'utilisateur. Maintenant, vos boutons gauche et droit peuvent utiliser des composants de date pour ajouter ou supprimer un mois de la date de la variable d'instance, puis mettre à jour les étiquettes.

+0

oui, merci pour votre explication – joseph

+0

Oh je vois c'est mieux, @joseph vous devez faire une variable d'instance dans votre implémentation par exemple '@implementation yourViewController {NSDate * myDate'; } ou dans vos fichiers .m ou .h alors suivez simplement la réponse de @ Wain, et utilisez cette variable dans vos méthodes 'rightBtn'' leftBtn 'au lieu de datelabel.txt. – enzo