2011-04-19 80 views
0

我有这样的代码IOS:模拟日历

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天标签必须是红色的;你可以帮我吗?

+0

我看不出有任何代码的标签。 – Eiko 2011-04-19 07:51:27

+0

我不知道如何为我的31个标签做代码;我可以设置第一个标签first.text = strDate; “第一”是我的标签;但是之后?换其他标签?我必须给[component setDay:1]添加一个值;没有? – CrazyDev 2011-04-19 07:53:49

回答

2

循环是您的朋友:

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

是的......但为什么我必须做一个“为”?我有31个标签:first.text,second.text,third.text ecc ...每个标签都有它的价值;当我做这件事情时,我会创建一个IBAction,在那里我可以添加一个月到我的标签,所以当我按下按钮时,所有标签都会在下个月更改它的值... – CrazyDev 2011-04-19 08:32:42

+0

当然,您不必使用循环。它只是为你节省了一百行代码。但是,您仍然需要使用数组或类似的标签来方便地访问它们。 – Eiko 2011-04-19 08:40:03

0

这就好比@英子的回答,但更正确的事情就像日光节约时间,几个月内不会有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];