Como faço para implementar os botões do mês anterior / próximo e mostrar as datas do mês atual?
Cenário:
Eu tenho um aplicativo iOS de controle de despesas e estou armazenando despesas de um controlador de exibição de detalhes de despesas em uma visão de tabela (com o controlador de resultados buscados) que mostra a lista de despesas junto com a categoria e a quantidade e a data. Eu tenho um atributo de data na minha entidade "Money", que é uma entidade pai para uma despesa ou uma renda.
Questão:
O que eu quero é basicamente categorizar minhas despesas em uma base mensal e exibi-lo como o título do cabeçalho da seção, por exemplo: (1 de novembro - 30 de novembro de 2012) e mostra a quantidade de despesas e material relacionado de acordo com esse mês específico. Dois botões são fornecidos nessa visualização, se eu pressionar o botão direito, ele aumentará o mês em um mês (1º de dezembro a 31 de dezembro de 2012) e, da mesma forma, o botão esquerdo diminuiria o mês em um mês.
Como eu conseguiria isso? Eu estou tentando o seguinte código - que é meio que trabalhando. Suponha que eu tenha meu cabeçalho de seção atual como (1º de novembro a 30 de novembro de 2012) e quando pressiono o botão esquerdo, ele me fornece o cabeçalho da seção (1º de outubro a 30 de outubro de 2012) que está errado, deve ser 31 de outubro de 2012 e não 30 de outubro de 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;
}
Então eu tenho um método chamado "monthCalculation" no qual eu chamo os dois métodos acima.
- (void)monthCalculation
{
[self firstDateOfTheMonth];
[self lastDateOfTheMonth];
}
Agora o seguinte código quando eu pressiono o botão esquerdo (para diminuir o mês por um mês):
- (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);
}
O código a seguir quando eu pressiono o botão direito (para incrementar o mês por um mês):
- (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);
}
Eu estou fazendo a coisa certa? ou há uma maneira melhor de conseguir isso? Qualquer ajuda será apreciada.