IOS: симулировать календарь - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть этот код

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2011];
[components setDay:1];
[components setMonth:7];
NSCalendar *gregorianCalendar = [[[NSCalendar alloc]       initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *date = [gregorianCalendar dateFromComponents:components];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd"];
NSString *strDate = [dateFormatter stringFromDate: date];

, но теперь я хочу установить 31 метку для каждого дня моего месяца: как я могу добавить этот компонент для каждой метки?

[components setDay:1];

иЯ также хочу, чтобы все воскресенья были красными, тогда каждые 7 дней этикетка должна быть красного цвета;ты можешь мне помочь?

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Циклы - ваш друг:

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2011];
[components setDay:1];
[components setMonth:7];
NSCalendar *gregorianCalendar = [[[NSCalendar alloc]       initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *firstDate = [gregorianCalendar dateFromComponents:components];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd"];

for (int i = 0; i < 31; i++) {
   NSTimeInterval seconds = 24*60*60 * i;
   NSDate *date = [NSDate dateWithTimeInterval:seconds sinceDate:firstDate];
   NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:date];
   int weekday = [weekdayComponents weekday];
   NSString *strDate = [dateFormatter stringFromDate: date];
   yourLabel.text = strDate;
   yourLabel.textColor = weekday == 1 ? [UIColor redColor : blackColor];
}

Пожалуйста, настройте переменную yourLabel на соответствующие.

0 голосов
/ 23 ноября 2011

Это похоже на ответ @ Eiko, за исключением того, что оно более корректно при работе с такими вещами, как летнее время, месяцы, у которых нет 31 дня, и т. Д .:

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2011];
[components setMonth:7];
[components setDay:1];

NSCalendar *gregorianCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *startDate = [gregorianCalendar dateFromComponents:components];
NSRange rangeOfDays = [gregorianCalendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:startDate];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd"];

for (NSInteger i = 1; i <= NSMaxRange(rangeOfDays); ++i) {
  [components setDay:i];
  NSDate *date = [gregorianCalendar dateFromComponents:components];

  yourLabel.text = [dateFormatter stringFromDate: date];

  NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:date];
  int weekday = [weekdayComponents weekday];

  yourLabel.textColor = weekday == 1 ? [UIColor redColor : blackColor];
}

[dateFormatter release];
...