我想显示
答案 0 :(得分:4)
-(NSArray*)calendarMonthView:(TKCalendarMonthView *)monthView marksFromDate:(NSDate *)startDate toDate:(NSDate *)lastDate{
NSLog(@"Date Selected is %@",date);
//txtbdate.text=date;
NSDateFormatter *timeFormat = [[[NSDateFormatter alloc] init] autorelease];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[timeFormat setDateFormat:@"yyyy-MM-dd"];
[timeFormat setTimeZone:gmt];
//[timeFormat setLocale:[NSLocale currentLocale]];
//[timeFormat setTimeZone:[NSTimeZone localTimeZone]];
NSString *theTime = [timeFormat stringFromDate:date];
NSLog(@"%@",theTime);
objappdel.strdate=theTime;
[tkmonthView reload];
AppointmentDetail *appointmentDetail=[[AppointmentDetail alloc]initWithNibName:@"AppointmentDetail" bundle:nil];
[self.navigationController pushViewController:appointmentDetail animated:YES];
[appointmentDetail release];
}
- (NSArray*)calendarMonthView:(TKCalendarMonthView *)monthView marksFromDate:(NSDate *)startDate toDate:(NSDate *)lastDate
{
NSMutableArray * data = [[NSMutableArray alloc] init];
NSDateFormatter *dateForm = [[NSDateFormatter alloc] init];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateForm setDateFormat:@"yyyy-MM-dd"];
[dateForm setTimeZone:gmt];
NSDate *date ;
for (int i=0; i<[objappdel.arrDate count]; i++)
{
NSString *time;
time=[objappdel.arrDate objectAtIndex:i];
//time= [[[jobData valueForKey:@"Record"] objectAtIndex:i] valueForKey:@"JobStartDate"];
//time = [[time componentsSeparatedByString:@" "] objectAtIndex:0];
date = [dateForm dateFromString:time];
[data addObject:[NSString stringWithFormat:@"%@",date]];
}
NSArray *copy = [data copy];
NSInteger index = [copy count] - 1;
for (id object in [copy reverseObjectEnumerator])
{
if ([data indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound)
{
[data removeObjectAtIndex:index];
}
index--;
}
NSLog(@"sorted dates are %@",copy);
// Initialise empty marks array, this will be populated with TRUE/FALSE in order for each day a marker should be placed on.
NSMutableArray *marks = [NSMutableArray array];
// Initialise calendar to current type and set the timezone to never have daylight saving
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
// Construct DateComponents based on startDate so the iterating date can be created.
// Its massively important to do this assigning via the NSCalendar and NSDateComponents because of daylight saving has been removed
// with the timezone that was set above. If you just used "startDate" directly (ie, NSDate *date = startDate;) as the first
// iterating date then times would go up and down based on daylight savings.
NSDateComponents *comp = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit |
NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit)
fromDate:startDate];
NSDate *d = [cal dateFromComponents:comp];
// Init offset components to increment days in the loop by one each time
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:1];
// for each date between start date and end date check if they exist in the data array
while (YES) {
// Is the date beyond the last date? If so, exit the loop.
// NSOrderedDescending = the left value is greater than the right
if ([d compare:lastDate] == NSOrderedDescending)
{
break;
}
// If the date is in the data array, add it to the marks array, else don't
//NSLog(@"%@",[d description]);
if ([data containsObject:[d description]]) {
[marks addObject:[NSNumber numberWithBool:YES]];
} else {
[marks addObject:[NSNumber numberWithBool:NO]];
}
// Increment day using offset components (ie, 1 day in this instance)
d = [cal dateByAddingComponents:offsetComponents toDate:d options:0];
}
[offsetComponents release];
return [NSArray arrayWithArray:marks];
}
使用此委托方法。它将返回您想要突出显示的NSArray日期。
答案 1 :(得分:1)
您可以先在数组中输入日期来完成此操作。代码是。
- (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)d {
NSLog(@"selected Date IS - %@",inDate);
[myArray addObject:d];
for (id entry in myArray)
{
if (inDate == nil && outDate == nil)
{
inDate = d;
outDate = d;
}
if ([d compare:inDate] == NSOrderedAscending)
{
inDate = d;
}
if ([d compare:outDate] == NSOrderedDescending)
{
outDate = d;
}
d = nil;
}
}
在此之后,您必须使用按钮单击操作,您可以通过该操作在这两个日期之间选择日期。代码是:
- (IBAction)goBtn:(id)sender
{
NSLog(@"startDate is: %@",inDate);
NSLog(@"endDate is: %@",outDate);
[calendar reload];
inDate = nil;
outDate = nil;
}
}
然后在一个委托方法中,您只需要创建一个包含这两个日期之间所有日期的数组。它会在按钮点击后立即调用。代码是:
- (NSArray*)calendarMonthView:(TKCalendarMonthView *)monthView marksFromDate:(NSDate *)startDate toDate:(NSDate *)lastDate {
//***********
NSMutableArray *tempData = [[NSMutableArray alloc] init];
NSDate *nextDate;
for ( nextDate = inDate ; [nextDate compare:outDate] < 0 ; nextDate = [nextDate addTimeInterval:24*60*60] ) {
// use date
NSLog(@"%@",nextDate);
[tempData addObject:[NSString stringWithFormat:@"%@",nextDate]];
}
[tempData addObject:[NSString stringWithFormat:@"%@",outDate]];
//***********
NSMutableArray *marks = [NSMutableArray array];
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDateComponents *comp = [cal components:(NSMonthCalendarUnit | NSMinuteCalendarUnit | NSYearCalendarUnit |
NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSSecondCalendarUnit)
fromDate:startDate];
NSDate *d = [cal dateFromComponents:comp];
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:1];
while (YES) {
if ([d compare:lastDate] == NSOrderedDescending) {
break;
}
if ([tempData containsObject:[d description]]) {
[marks addObject:[NSNumber numberWithBool:YES]];
} else {
[marks addObject:[NSNumber numberWithBool:NO]];
}
d = [cal dateByAddingComponents:offsetComponents toDate:d options:0];
}
return [NSArray arrayWithArray:marks];
}
我希望,这对你有帮助。如果您遇到任何问题,请告诉我。