Как реализовать кнопки предыдущего / следующего месяца и показать даты текущего месяца?
Сценарий:
У меня есть приложение iOS для отслеживания расходов, и я сохраняю расходы из контроллера представления сведений о расходах в виде таблицы (с контроллером полученных результатов), которая показывает список расходов вместе с категорией, суммой и датой. У меня есть атрибут даты в моей сущности "Деньги", который является родительской сущностью для расходов или доходов.
Вопрос:
Я хочу в основном классифицировать мои расходы ежемесячно и отображать их в виде заголовка раздела, например: (1 ноября - 30,2012), и он показывает сумму расходов и связанные с ними данные в соответствии с конкретным месяцем. В этом представлении предусмотрены две кнопки: если я нажму правую кнопку, она будет увеличивать месяц на месяц (1 декабря - 31 декабря 2012 г.), и аналогичным образом левая кнопка будет уменьшать месяц на месяц.
Как мне это сделать? Я пытаюсь следующий код - который вроде работает. Предположим, у меня есть текущий заголовок раздела (1 ноября - 30 ноября 2012 г.), и когда я нажимаю левую кнопку, он дает мне заголовок раздела (1 октября - 30 октября 2012 г.), что неверно, это должно быть 31 октября 2012 г. а не 30 октября 2012 года.
- (NSDate *)firstDateOfTheMonth
{
self.startDate = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone localTimeZone]];
NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:self.startDate];
[components setDay:1];
firstDateOfTheMonth = [[calendar dateFromComponents:components] retain];
return firstDateOfTheMonth;
}
- (NSDate *)lastDateOfTheMonth
{
NSCalendar* calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone localTimeZone]];
NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:firstDateOfTheMonth];
[components setMonth:[components month]+1];
[components setDay:0];
lastDateOfTheMonth = [[calendar dateFromComponents:components] retain];
return lastDateOfTheMonth;
}
Затем у меня есть метод с именем "monthCalculation", в котором я вызываю два вышеупомянутых метода.
- (void)monthCalculation
{
[self firstDateOfTheMonth];
[self lastDateOfTheMonth];
}
Теперь следующий код, когда я нажимаю левую кнопку (чтобы уменьшить месяц на месяц):
- (IBAction)showPreviousDates:(id)sender
{
[self monthCalculation];
NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease];
[dateComponents setMonth:-1];
NSDate *newDate1 = [[NSCalendar currentCalendar]
dateByAddingComponents:dateComponents
toDate:firstDateOfTheMonth options:0];
NSDate *newDate2 = [[NSCalendar currentCalendar]
dateByAddingComponents:dateComponents
toDate:lastDateOfTheMonth options:0];
self.startDate = newDate1;
self.endDate = newDate2;
NSLog(@" self start date in previous mode =%@", self.startDate);
NSLog(@" self end date in previous mode =%@", self.endDate);
}
Следующий код, когда я нажимаю правую кнопку (чтобы увеличить месяц на месяц):
- (IBAction)showNextDates:(id)sender
{
[self monthCalculation];
NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease];
[dateComponents setMonth:1];
NSDate *newDate1 = [[NSCalendar currentCalendar]
dateByAddingComponents:dateComponents
toDate:firstDateOfTheMonth options:0];
NSDate *newDate2 = [[NSCalendar currentCalendar]
dateByAddingComponents:dateComponents
toDate:lastDateOfTheMonth options:0];
self.startDate = newDate1;
self.endDate = newDate2;
NSLog(@" self start date in previous mode =%@", self.startDate);
NSLog(@" self end date in previous mode =%@", self.endDate);
}
Я делаю это правильно? или есть лучший способ добиться этого? Любая помощь будет оценена.