2017-10-11 226 views
0

我使用collectionView创建了一个日历...到目前为止,我完全获得了所有WEEKDAY,但是我遇到了编号日期的问题。 collectionView总是会返回我31天而不检查该月是否包含30天或31天..我错在哪里?注意力不集中的错误?你可以帮我吗?这是代码,我用它来获取日历UICollectionView不能正确返回单元格

+(NSInteger)dayOfMonthFromDate:(NSDate *)date { 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date]; 
    NSInteger numberOfDayInMonth = range.length; 
    return numberOfDayInMonth; 
} 

+(void)buildSmartCalendarDayWithWeekArray:(NSMutableArray *)week andDay:(NSMutableArray *)day { 

    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDate *now = [NSDate date]; 

    /***** YEAR ****/ 
    NSInteger year = [calendar component:NSCalendarUnitYear fromDate:now]; 

    /**** MONTH ****/ 
    NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:now]; 


    NSDateComponents *components = [[NSDateComponents alloc] init]; 
    components.day = 1; 
    components.month = month+4; 
    components.year = year; 

    NSDate *date = [calendar dateFromComponents:components]; 
    NSDateComponents *compWeek = [calendar components:NSCalendarUnitWeekday fromDate:date]; 

    NSInteger weekDay = [compWeek weekday]; 

    /******* Numero di giorni del mese in corso *******/ 
    /*************************************************/ 
    NSInteger numberOfDay = [KPSmallCalendarDayData dayOfMonthFromDate:[NSDate date]]; 

    //------------------------------------------------------------------// 
    /******* Recupera in quale giorno siamo *******/ 
    /*************************************************/ 
    NSUInteger todayWeekDay = weekDay-1; 

    /******* Crea un ciclo for per la suddivisione di ogni giorno del mese in forma testuale *******/ 
    /*****************************************************************************/ 

    for (NSInteger initialDay = 1; initialDay <= numberOfDay; initialDay ++) { 

     // Crea l'array contenente tutti giorni del mese dal LUN alla DOM 
     NSDateFormatter *dayFormat = [[NSDateFormatter alloc] init]; 

     NSString *dayString = [NSString stringWithFormat:@"%@", [[dayFormat shortWeekdaySymbols] objectAtIndex:todayWeekDay]]; 
     NSString *uppercase = [dayString uppercaseString]; 
     [week addObject:uppercase]; 

     todayWeekDay ++; 

     // Crea l'array contenente la numerazione delle celle 
     NSNumber *totalDay = [NSNumber numberWithInteger:initialDay]; 
     [day addObject:totalDay]; 

     if (todayWeekDay >6) todayWeekDay = 0; 
    } 
} 

回答

1

也许......

1. NSDate *date = [calendar dateFromComponents:components]; 
2. NSDateComponents *compWeek = [calendar components:NSCalendarUnitWeekday fromDate:date]; 
3. 
4. NSInteger weekDay = [compWeek weekday]; 
5. 
6. /******* Numero di giorni del mese in corso *******/ 
7. /*************************************************/ 
8. NSInteger numberOfDay = [KPSmallCalendarDayData dayOfMonthFromDate:[NSDate date]]; 

它看起来像你想使用date从第1行,但你传递一个date对象在第8行([NSDate date]其中==今天)。应该是第8行:

NSInteger numberOfDay = [KPSmallCalendarDayData dayOfMonthFromDate:date]; 
+0

是@don !!!谢谢...这是非常愚蠢的错误 – kAiN