【问题标题】:iOS : Move forward dynamically NSDate with buttoniOS:使用按钮动态向前移动 NSDate
【发布时间】:2012-01-19 23:38:19
【问题描述】:

我为我的日期创建了一个自定义类,需要通过按钮向前和向后移动日期。这是我显示今天日期的代码:

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

那么如何通过按钮动态更改此行并更改日期?

【问题讨论】:

    标签: iphone ios xcode ipad sdk


    【解决方案1】:

    您可以为您的offsetComponents 变量声明int。然后:

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

    【讨论】:

      【解决方案2】:

      做这样的事情怎么样:

      (使用 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完成项目

      【讨论】:

      • 谢谢我正在使用自定义类来创建日期,我无法将我的代码更改为其他内容...请您根据我的代码修改您的答案吗?谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多