iOS: двигаться вперед динамически NSDate с помощью кнопки - PullRequest
2 голосов
/ 20 января 2012

Я создал собственный класс для своих дат, и мне нужно перемещать даты вперед и назад с помощью кнопки.Вот мой код, который показывает сегодняшнюю дату:

- (NSString *) showToday {

    NSCalendar *myCal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setCalendar:myCal];

    offsetComponents = [[NSDateComponents alloc] init];
//shows today 
    [offsetComponents setDay:0];

    NSDate *nextDate = [myCal dateByAddingComponents:offsetComponents toDate:[NSDate date] options:0];

    [dateFormatter setDateFormat:@"d"];
    NSString *currDay = [dateFormatter stringFromDate:nextDate];

    [NSString stringWithFormat:@"%@",currDay];

    [myCal release];
    [dateFormatter release];
    return currDay;
}

на моем viewController:

customClass = [[customClass alloc]init];

    day.text = [cal showToday];

, поэтому, если мне нужно переместить дату вперед, я просто изменяю этот код строки на:

//show tomorrow 
[offsetComponents setDay:1];

так Как я могу динамически изменить эту строку и изменить даты с помощью кнопки?

Ответы [ 2 ]

3 голосов
/ 22 января 2012

Вы можете объявить int для вашей переменной offsetComponents.затем:

- (IBAction)moveDatesForward:(id)sender {

    NSCalendar *persCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSPersianCalendar];    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSLocale *IRLocal = [[NSLocale alloc] initWithLocaleIdentifier:@"fa_IR"];
    [dateFormatter setLocale:IRLocal];
    [dateFormatter setCalendar:persCalendar];

    offsetComponents = [[NSDateComponents alloc] init];

    offsetComponents.day = _dayNumber;

    NSDate *nextDate = [persCalendar dateByAddingComponents:offsetComponents toDate:[NSDate date] options:0];

    [dateFormatter setDateFormat:@"d"];
    dayLabel.text = [dateFormatter stringFromDate:nextDate];

    [NSString stringWithFormat:@"%@",dayLabel];

    [persCalendar release];
    [dateFormatter release];

      _dayNumber ++;

}
1 голос
/ 20 января 2012

Как насчет того, чтобы сделать что-то вроде этого:

(использует ARC - не жалуйтесь на утечки памяти.)

- (void) refreshDateLabel
{
    NSDateFormatter* dateFormatter = [NSDateFormatter new];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];

    self.dateLabel.text = [dateFormatter stringFromDate: self.date];
}

- (IBAction)forward:(id)sender
{
    self.date = [self.date dateByAddingTimeInterval: 24 * 60 * 60];
    [self refreshDateLabel];
}

- (IBAction)back:(id)sender
{
    self.date = [self.date dateByAddingTimeInterval: -(24 * 60 * 60)];
    [self refreshDateLabel];
}

Завершите проект на https://github.com/st3fan/StackOverflowAnswers/blob/master/DateSelection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...