Objective c IOS:模拟日历

Objective c IOS:模拟日历,objective-c,xcode,ios,label,nsdate,Objective C,Xcode,Ios,Label,Nsdate,我有这个密码 NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease]; [components setYear:2011]; [components setDay:1]; [components setMonth:7]; NSCalendar *gregorianCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGr

我有这个密码

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];
我也希望所有的星期天都是红色的,那么avery 7天标签必须是红色;你能帮我吗?

我是你的朋友:

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];
}
NSDateComponents*components=[[NSDateComponents alloc]init]autorelease];
[年度:2011年];
[组件设定日:1];
[每月7宗];;
NSCalendar*gregorianCalendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]自动释放];
NSDate*firstDate=[GregorianCalendarDateFromComponents:components];
NSDateFormatter*dateFormatter=[[NSDateFormatter alloc]init];
[日期格式化程序setDateFormat:@“dd”];
对于(int i=0;i<31;i++){
NSTimeInterval秒数=24*60*60*i;
NSDate*date=[NSDate date WITH TIME INTERVAL:SENSEDATE:firstDate]之后的秒数;
NSDateComponents*weekdayComponents=[gregorian components:NSWeekdayCalendarUnit fromDate:date];
int weekday=[weekdayComponents weekday];
NSString*strDate=[dateFormatter stringFromDate:date];
yourLabel.text=标准日期;
yourLabel.textColor=工作日==1?[UIColor redColor:blackColor];
}

请将
yourLabel
变量调整为适当的变量。

这类似于@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];
NSDateComponents*components=[[NSDateComponents alloc]init]autorelease];
[年度:2011年];
[每月7宗];;
[组件设定日:1];
NSCalendar*gregorianCalendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]自动释放];
NSDate*startDate=[GregorianCalendarDateFromComponents:components];
NSRange rangeOfDays=[gregorianCalendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:startDate];
NSDateFormatter*dateFormatter=[[NSDateFormatter alloc]init];
[日期格式化程序setDateFormat:@“dd”];

对于(NSInteger i=1;我看不到标签的任何代码。我不知道如何为我的31个标签编写代码;我可以先设置第一个标签。text=strDate;其中“first”是我的标签;但之后?对于其他标签?我必须向[components setDay:1]添加一个值;否?是…但为什么我必须执行“for”?我有31个标签:first.text,second.text,third.text ecc…每个标签都有它的值;当我做这个东西时,我会创建一个iAction,在其中我可以向我的标签添加一个月,所以当我按下按钮时,所有标签都会在下个月更改它的值…当然,你不必使用循环。它只为你节省了100行代码。但是,你是till需要您的标签以数组形式或类似方式方便地访问它们。