4

我有一个应用程序,所以我只是在我的应用程序中添加了一些特定日期和时间的事件或剩余部分(足球比赛、电影)。这个添加事件我也想在 iphone 日历中显示。

谢谢并恭祝安康。

4

3 回答 3

4

你检查过 EventKit吗?

于 2012-05-01T19:14:03.570 回答
1

您可以为此使用简单的 JTCalender

首先 oyu 必须在项目中包含 JT Calender 框架

您必须在 UIViewController 中创建两个视图:

第一个视图是 JTCalendarMenuView,它表示带有月份名称的部分。此视图是可选的。第二个视图是 JTHorizo​​ntalCalendarView 或 JTVerticalCalendarView,它代表日历本身。你的 UIViewController 必须实现 JTCalendarDelegate,所有方法都是可选的。

在 .h 文件中

#import <UIKit/UIKit.h>
#import "CustomTableViewCell.h"

#import "JTCalendar/JTCalendar.h"



@interface CalendarViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,JTCalendarDelegate>

@property (strong, nonatomic)  JTCalendarMenuView *calendarMenuView;
@property (strong, nonatomic) JTHorizontalCalendarView *calendarContentView;

@property (strong, nonatomic) JTCalendarManager *calendarManager;

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *calendarContentViewHeight;


@end


.m file
------------

#import "CalendarViewController.h"

#import "ApptWindowView.h"
#import "SVProgressHUD.h"

@interface CalendarViewController () < UITextFieldDelegate>{
    NSMutableDictionary *dayDateDict;
    NSMutableArray*jsonDate,*dateAr1,*dateAr2;
    UITableView *appointTableView;
    CGSize screenRect;
    NSString *dateAfterString;

    int fontSize,headerBtnfont,height;
    NSDateFormatter *dateFormat1 ;
    NSString*cmpDay;
    int count;
    NSString * clickedDate;
    NSString *day ;




     NSMutableDictionary *_eventsByDate;

        NSDate *_todayDate;
        NSDate *_minDate;
        NSDate *_maxDate;

        NSDate *_dateSelected;

  UIActivityIndicatorView *activityIndicator;
    int i;
}




@end

@implementation CalendarViewController
- (void)viewDidLoad
{
    [super viewDidLoad];

        i=0;
    dayDateDict=[[NSMutableDictionary alloc]init];
    dateAr1=[[NSMutableArray alloc]init];
    dateAr2=[[NSMutableArray alloc]init];
    screenRect=[[UIScreen mainScreen]bounds].size;





    //Create header here
    self.view.backgroundColor=[UIColor colorWithRed:(CGFloat)233/255 green:(CGFloat)239/255 blue:(CGFloat)239/255 alpha:1];
    UIView * headerView =[[UIView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 55)];
    headerView.backgroundColor =[UIColor whiteColor];
    [self.view addSubview:headerView];

    UILabel * titleLable =[[UILabel alloc]initWithFrame:CGRectMake(60, 25, [UIScreen mainScreen].bounds.size.width-120, 25)];
    titleLable.text =@"CHOOSE APPOINTMENT";
    titleLable.textAlignment = NSTextAlignmentCenter;
    titleLable.font =[UIFont systemFontOfSize:12];
    [headerView addSubview:titleLable];

    UIButton *backButton =  [UIButton buttonWithType:UIButtonTypeCustom];
    [backButton setImage:[UIImage imageNamed:@"back_btn.png"] forState:UIControlStateNormal];
    [backButton setFrame:CGRectMake(15, 30, 45, 15)];
    [backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
    [headerView addSubview:backButton];

    UIButton *nextButton =  [UIButton buttonWithType:UIButtonTypeCustom];
    [nextButton setImage:[UIImage imageNamed:@"next_btn.png"] forState:UIControlStateNormal];
    [nextButton setFrame:CGRectMake([UIScreen mainScreen].bounds.size.width-60, 30, 45, 15)];
    [nextButton addTarget:self action:@selector(continueAction) forControlEvents:UIControlEventTouchUpInside];
    [headerView addSubview:nextButton];


    [self activityAction];
    dispatch_async(dispatch_get_global_queue(0, 0),^{



        dispatch_async(dispatch_get_main_queue(),^{
            // [self createUI];
            [self fetchSchedule];

            _calendarManager = [JTCalendarManager new];
            _calendarManager.delegate = self;
            [self createMinAndMaxDate];
     _calendarContentView=[JTHorizontalCalendarView new];         
            _calendarContentView.frame = CGRectMake(20, 100,[UIScreen mainScreen].bounds.size.width-40 , [UIScreen mainScreen].bounds.size.width-40);
            _calendarContentView.backgroundColor=[UIColor whiteColor];

            [_calendarManager setContentView:_calendarContentView];
            [self.view addSubview:_calendarContentView];


            _calendarMenuView=[JTCalendarMenuView new];
            _calendarMenuView.frame=CGRectMake(20, 55,[UIScreen mainScreen].bounds.size.width-40 ,50);
            _calendarMenuView.backgroundColor=[UIColor clearColor];
            [self.view addSubview:_calendarMenuView];
            [_calendarManager setMenuView:_calendarMenuView];
            [_calendarManager setDate:[NSDate date]];


            [activityIndicator stopAnimating];
        });


    });

    [self createUI];

}
-(void)continueAction{
    ApptWindowView *apptWindow=[[ApptWindowView alloc]init];
    [self.navigationController pushViewController:apptWindow animated:YES];
}
- (UIView<JTCalendarDay> *)calendarBuildDayView:(JTCalendarManager *)calendar
{
    JTCalendarDayView *view = [JTCalendarDayView new];
    view.textLabel.font = [UIFont fontWithName:@"Avenir-Light" size:13];
    view.textLabel.textColor = [UIColor blackColor];

    return view;
}




    NSError *error;   NSURLResponse * urlResponse;


    NSURL * url =[NSURL URLWithString:fetchScheduleService];

    NSMutableURLRequest  * request =[[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:50];



    NSString * body =[NSString stringWithFormat:@"departmentId=%d",[SingletonClass sharedSingleton].deptId ];

    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    NSData * data =[NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
    if (!data) {
          [SVProgressHUD dismiss];
        return;
    }
    id jsonResponse =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

    NSLog(@"schedule jason---->%@",jsonResponse);




    if ([[jsonResponse objectForKey:@"code"] isEqualToNumber:[NSNumber numberWithInt:200]]) {



        jsonDate=[jsonResponse objectForKey:@"data"];


        [self convertTimeStamp];

    }
        //dispatch_async(dispatch_get_main_queue(),^{
            // [SVProgressHUD dismiss];
            //[self createUI];
      //  });

//    });

}

#pragma mark-Create UI/Table View
-(void)createUI{
    appointTableView = [[UITableView alloc]init];
    appointTableView.frame =  CGRectMake(10, 100+screenRect.width-40+10, screenRect.width-20, screenRect.height-( 100+screenRect.width-40+10));
    appointTableView.delegate = self;
    appointTableView.dataSource = self;
    appointTableView.backgroundColor =[UIColor clearColor];
    appointTableView.showsVerticalScrollIndicator = NO;
    appointTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [self.view addSubview:appointTableView];
}



-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [[dayDateDict objectForKey:clickedDate] count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    CustomTableViewCell * cell =(CustomTableViewCell*) [tableView cellForRowAtIndexPath:indexPath];
    if (!cell) {
        cell = [[CustomTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"calender"];
        cell.backgroundColor = [UIColor clearColor];
    }
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;


    [dateFormat1 setDateFormat:@"HH:mm"];

    NSDate * aptTime =[dateFormat1 dateFromString:[[dayDateDict objectForKey:clickedDate]objectAtIndex:indexPath.row] ];
    NSDate *dateAfter=[aptTime dateByAddingTimeInterval:(1800) ];
   dateAfterString =[dateFormat1 stringFromDate:dateAfter];
    NSString *dis=[NSString stringWithFormat:@"%@-%@",[[dayDateDict objectForKey:clickedDate]objectAtIndex:indexPath.row],dateAfterString];





    cell.appointmentTime.text =dis;



    return  cell;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        return  100;
    }
    return 60;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    ApptWindowView *apptWindow=[[ApptWindowView alloc]init];
    [self.navigationController pushViewController:apptWindow animated:YES];


    NSLog(@"clicked date-->%@",[[dayDateDict objectForKey:clickedDate]objectAtIndex:indexPath.row]);


    NSDate * aptTime =[dateFormat1 dateFromString:[[dayDateDict objectForKey:clickedDate]objectAtIndex:indexPath.row] ];
    NSDate *dateAfter=[aptTime dateByAddingTimeInterval:(1800) ];
    dateAfterString =[dateFormat1 stringFromDate:dateAfter];


    NSString *dis=[NSString stringWithFormat:@"%@ to %@ on %@",[[dayDateDict objectForKey:clickedDate]objectAtIndex:indexPath.row],dateAfterString,day];


    [[NSUserDefaults standardUserDefaults]setObject:dis forKey:@"appointmentTime"];
    [[NSUserDefaults standardUserDefaults]synchronize];



}
#pragma mark-convert timeStamp to date
-(void)convertTimeStamp{




    for( NSString*valueForDate in jsonDate){



 NSTimeInterval timeSec=[valueForDate doubleValue];
 NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeSec];

 NSLog(@"\ndate are-->%@",date);

 [self separateDate:date];
    }



 }


 #pragma mark-separate date and Time
 -(void)separateDate:(NSDate*)date1{

dateFormat1 = [[NSDateFormatter alloc] init];


 [dateFormat1 setDateFormat:@"HH:mm"];

 NSString * resultTime =[dateFormat1 stringFromDate:date1];
 NSLog(@"date is-->%@",resultTime);

 [dateFormat1 setDateFormat:@"dd-MM-YYYY"];
 NSString *resultDay=[dateFormat1 stringFromDate:date1];
 NSLog(@"day is-->%@",resultDay);



          if([cmpDay isEqual:resultDay] || cmpDay==nil){

              if(count!=1){
               [dateAr1 addObject:resultTime];
              }
              if(count==1){

                  [dateAr2 addObject:resultTime];
              }



     }
          else{

              count=1;

               dateAr2=[[NSMutableArray alloc]init];
               [dateAr2 addObject:resultTime];
          }

     cmpDay=resultDay;


     if(count!=1){
     [dayDateDict setObject:dateAr1 forKey:resultDay];
     }
     else{
     [dayDateDict setObject:dateAr2 forKey:resultDay];
     }

     NSLog(@"dictionary--->%@",dayDateDict);




 }
#pragma mark - Buttons callback

- (IBAction)didGoTodayTouch
{
    [_calendarManager setDate:_todayDate];
}

- (IBAction)didChangeModeTouch
{
    _calendarManager.settings.weekModeEnabled = !_calendarManager.settings.weekModeEnabled;
    [_calendarManager reload];

    CGFloat newHeight = 300;
    if(_calendarManager.settings.weekModeEnabled){
        newHeight = 85.;
    }

    self.calendarContentViewHeight.constant = newHeight;
    [self.view layoutIfNeeded];
}

#pragma mark - CalendarManager delegate

// Exemple of implementation of prepareDayView method
// Used to customize the appearance of dayView
- (void)calendar:(JTCalendarManager *)calendar prepareDayView:(JTCalendarDayView *)dayView
{
    // Today
    if([_calendarManager.dateHelper date:[NSDate date] isTheSameDayThan:dayView.date]){
        dayView.circleView.hidden = NO;
        dayView.circleView.backgroundColor = [UIColor blueColor];
        dayView.dotView.backgroundColor = [UIColor whiteColor];
        dayView.textLabel.textColor = [UIColor whiteColor];
    }
    // Selected date
    else if(_dateSelected && [_calendarManager.dateHelper date:_dateSelected isTheSameDayThan:dayView.date]){
        dayView.circleView.hidden = NO;
        dayView.circleView.backgroundColor = [UIColor redColor];
        dayView.dotView.backgroundColor = [UIColor whiteColor];
        dayView.textLabel.textColor = [UIColor whiteColor];
    }
    // Other month
    else if(![_calendarManager.dateHelper date:_calendarContentView.date isTheSameMonthThan:dayView.date]){
        dayView.circleView.hidden = YES;
        dayView.dotView.backgroundColor = [UIColor redColor];
        dayView.textLabel.textColor = [UIColor lightGrayColor];
    }
    // Another day of the current month
    else{
        dayView.circleView.hidden = YES;
        dayView.dotView.backgroundColor = [UIColor redColor];
        dayView.textLabel.textColor = [UIColor blackColor];
    }

    if([self haveEventForDay:dayView.date]){
        dayView.dotView.hidden = NO;
    }
    else{
        dayView.dotView.hidden = YES;
    }
}

- (void)calendar:(JTCalendarManager *)calendar didTouchDayView:(JTCalendarDayView *)dayView
{
    _dateSelected = dayView.date  ;

    NSLog(@"orginal Clicked day-->%@",dayView.date);



    NSDateFormatter *dateFormat2 = [[NSDateFormatter alloc] init];

            [dateFormat2 setDateFormat:@"dd-MM-YYYY"];

            clickedDate =[dateFormat2 stringFromDate:_dateSelected];

            NSLog(@"Selected date===>%@",clickedDate);


            NSString* s= [dayDateDict objectForKey:clickedDate];
            NSLog(@"time is===>%@",s);

            [dateFormat2 setDateFormat:@"EEE, MMM dd "];

           day =[dateFormat2 stringFromDate:_dateSelected];


            NSLog(@"Selected day===>%@",day);



    // Animation for the circleView
    dayView.circleView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1);
    [UIView transitionWithView:dayView
                      duration:.3
                       options:0
                    animations:^{
                        dayView.circleView.transform = CGAffineTransformIdentity;
                        [_calendarManager reload];
                    } completion:nil];


    // Load the previous or next page if touch a day from another month

    if(![_calendarManager.dateHelper date:_calendarContentView.date isTheSameMonthThan:dayView.date]){
        if([_calendarContentView.date compare:dayView.date] == NSOrderedAscending){
            [_calendarContentView loadNextPageWithAnimation];
        }
        else{
            [_calendarContentView loadPreviousPageWithAnimation];
        }
    }

    [appointTableView reloadData];
}

#pragma mark - CalendarManager delegate - Page mangement

// Used to limit the date for the calendar, optional
- (BOOL)calendar:(JTCalendarManager *)calendar canDisplayPageWithDate:(NSDate *)date
{
    return [_calendarManager.dateHelper date:date isEqualOrAfter:_minDate andEqualOrBefore:_maxDate];
}

- (void)calendarDidLoadNextPage:(JTCalendarManager *)calendar
{
    //    NSLog(@"Next page loaded");
}

- (void)calendarDidLoadPreviousPage:(JTCalendarManager *)calendar
{
    //    NSLog(@"Previous page loaded");
}

#pragma mark - Fake data

- (void)createMinAndMaxDate
{
    _todayDate = [NSDate date];

    // Min date will be 2 month before today
    _minDate = [_calendarManager.dateHelper addToDate:_todayDate months:-3];

    // Max date will be 2 month after today
    _maxDate = [_calendarManager.dateHelper addToDate:_todayDate months:3];
}


- (BOOL)haveEventForDay:(NSDate *)date
{
    if(i>=[dayDateDict allKeys].count){
        i=0;
    }
    NSDateFormatter *dateFormatter;

    dateFormatter = [[NSDateFormatter alloc]init];
     [dateFormatter setDateFormat:@"dd-MM-YYYY"];



    NSString *key = [dateFormatter stringFromDate:date];



    while(i<[dayDateDict allKeys].count){
    if([key isEqual:[[dayDateDict allKeys]objectAtIndex:i]]){
            i++;
            return YES;
    }

        else
            return NO;

    }

        return NO;






}


#pragma mark-Activity Indicator
-(void)activityAction{
    CGSize windowSize =[UIScreen  mainScreen].bounds.size;
    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    activityIndicator.frame = CGRectMake(windowSize.width/2-20, windowSize.height/2-55,40 ,40);
    activityIndicator.color = [UIColor blackColor];
    activityIndicator.alpha = 1;
    [self.view addSubview:activityIndicator];
    //[self placeSearchbaseId];

    [activityIndicator startAnimating];


}


@end

我正在以时间戳格式获取 json 数据获取时间表单 json 并转换为本地时间

然后我在日历中为它创建一个事件

于 2015-10-20T06:04:24.387 回答
0

您拥有支持日历集成的第三方应用程序,例如 Kal。检查此链接: Kal日历

希望能帮助到你

于 2014-05-15T04:57:34.760 回答