2015-12-03 2 views
1

Здесь я использовал один ярлык для отображения текущего месяца с годом. и у него есть одна кнопка на стороне, чтобы перейти к предыдущему месяцу. когда пользователь нажимает боковую кнопку, он должен отображать предыдущий месяц.отображение предыдущего месяца и год

Я сделал только для показа настоящего месяца. но не способен перемещать и отображать предыдущий месяц на одной этикетке.

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

Вот моя кнопка пресс-метод:

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

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

Таким образом, в normal, когда view load она должна отображать December, 2015. И когда пользователь нажмет leftbutton, что datelabel должен отображать november,2015. И также при нажатии пользователем right button от november month он должен отображать december, 2015

Я очень смущен. Пожалуйста, помогите мне решить, это мой первый вопрос. Помогите мне. Спасибо!

+0

Я бы рекомендовал использовать 'NSDateComponents' (от текущей даты, то -1 месяц к ней) чтобы получить предыдущий месяц 'NSDate'. – Larme

ответ

0

Вы должны использовать 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]; 
} 
+0

ohh человек удивительный ход. Спасибо, помогите, конечно, это поможет мне учиться. – joseph

+0

Не конвертируйте назад и вперед из текста просмотра, это страшный дизайн и архитектура – Wain

+0

еще один вопрос, в моем выше сообщении. я ввел какой-то код в поле зрения, загрузился. его рабочий штраф. что мой код viewdidload в порядке или мне нужно изменить. – joseph

0

Используйте переменную экземпляра, чтобы сохранить текущую дату. Когда изображение загружено, установите его на [NSDate date]. Обновите текущий код, чтобы его можно было запустить в любое время и использовать дату переменной экземпляра для обновления меток.

После того, как вы это сделали, измените код установки, чтобы получить текущую дату, и используйте NSDateComponents, чтобы удалить день и время с даты, так что дата, которую вы храните в переменной экземпляра, является первым днем ​​месяца. Тест, чтобы убедиться, что он работает и выглядит одинаково для пользователя.

Теперь ваши левые и правые кнопки могут использовать компоненты даты, чтобы добавить или удалить месяц из даты переменной экземпляра, а затем обновить метки.

+0

да, спасибо за ваше объяснение – joseph

+0

О, я вижу, это лучше, @joseph вам нужно сделать переменную экземпляра в вашей реализации, например '@implementation yourViewController {NSDate * myDate'; } или в ваших файлах .m или .h, а затем просто следуйте за ответом @ Wain и используйте эту переменную в своих 'rightBtn'' leftBtn' методах вместо datelabel.txt. – enzo

Смежные вопросы