显示上月名称和年份

display the previous month name and year

这里我用一个标签来显示当前月份和年份。它旁边有一个按钮可以移至上个月。当用户按下侧面按钮时,它应该显示上个月。

我这样做只是为了显示当前月份。但无法在同一标签中移动和显示上个月。

NSDate *date = [NSDate date];

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

这是我的按钮按下方法:

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

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

所以在normal,当view load时应该显示December, 2015。当用户按下 leftbutton 时,datelabel 应该显示 november,2015。同样,当用户从 november month 按下 right button 时,它应该显示 december, 2015

我很困惑。请帮我解决,这是我的第一个 question.Help me.Thanks !

使用实例变量存储当前日期。加载视图后,将其设置为 [NSDate date]。更新您当前的代码,使其可以随时 运行 并使用实例变量 date 来更新标签。

完成后,更改设置代码以获取当前日期并使用 NSDateComponents 从日期中删除日期和时间,以便存储在实例变量中的日期是第一个每月的第几天。进行测试以确保它对用户有效且看起来相同。

现在您的左右按钮可以使用日期组件在实例变量日期中添加或删除月份,然后更新标签。

您需要使用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];

}

左键也一样

- (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];
}