Custom Calender
1) Write Following Code In NSObject :
* NSObject ( Get Method For add & Remove Event )
MyCalendar.h :
#import <Foundation/Foundation.h>
@interface MyCalendar : NSObject
+ (void)requestAccess:(void (^)(BOOL granted, NSError *error))success;
+ (BOOL)addEventAt:(NSDate*)eventDate withEndDate:(NSDate*)endDate withTitle:(NSString*)title inLocation:(NSString*)location latitude: (NSString*)latval longitude:(NSString*)longval ;
+ (BOOL)removeEventAt:(NSDate*)eventDate withEndDate:(NSDate*)endDate withTitle:(NSString*)title inLocation:(NSString*)location;
@end
MyCalendar.m :
#import "MyCalendar.h"
#import <EventKit/EventKit.h>
#import "SQLManager.h"
static EKEventStore *eventStore = nil;
static NSString *savedEventId;
@implementation MyCalendar
+ (void)requestAccess:(void (^)(BOOL granted, NSError *error))callback;
{
if (eventStore == nil) {
eventStore = [[EKEventStore alloc] init];
}
// request permissions
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:callback];
}
+ (BOOL)addEventAt:(NSDate*)eventDate withEndDate:(NSDate*)endDate withTitle:(NSString*)title inLocation:(NSString*)location latitude: (NSString*)latval longitude:(NSString*)longval ;
{
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
EKCalendar *calendar = nil;
NSString *calendarIdentifier = [[NSUserDefaults standardUserDefaults] valueForKey:@"my_calendar_identifier"];
// when identifier exists, my calendar probably already exists
// note that user can delete my calendar. In that case I have to create it again.
if (calendarIdentifier) {
calendar = [eventStore calendarWithIdentifier:calendarIdentifier];
}
// calendar doesn't exist, create it and save it's identifier
if (!calendar) {
calendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:eventStore];
// set calendar name. This is what users will see in their Calendar app
[calendar setTitle:@"My Calendar"];
if (calendar.source == nil)
{
for (EKSource *source in eventStore.sources)
{
if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"])
{
if([source calendarsForEntityType:EKEntityTypeEvent].count>0)
{ //Check to see if Calendar is enabled on iCloud
NSLog(@"iCloud Calendar is Enabled."); //Calendar is Enabled
calendar.source = source;
}else
{
NSLog(@"iCloud Calendar is Disabled."); //Calendar is Disabled
if (source.sourceType == EKSourceTypeLocal)
{
calendar.source = source;
break;
}
}
break;
}
else if (source.sourceType == EKSourceTypeLocal)
{
calendar.source = source;
break;
}
}
}
// save this in NSUserDefaults data for retrieval later
NSString *calendarIdentifier = [calendar calendarIdentifier];
NSError *error = nil;
BOOL saved = [eventStore saveCalendar:calendar commit:YES error:&error];
if (saved) {
// saved successfuly, store it's identifier in NSUserDefaults
[[NSUserDefaults standardUserDefaults] setObject:calendarIdentifier forKey:@"my_calendar_identifier"];
} else {
// unable to save calendar
return NO;
}
}
// this shouldn't happen
if (!calendar) {
return NO;
}
// assign basic information to the event; location is optional
event.calendar = calendar;
event.location = location;
event.title = title;
// set the start date to the current date/time and the event duration to two hours
NSDate *startDate = eventDate;
event.startDate = startDate;
event.endDate = endDate;
//event.endDate = [startDate dateByAddingTimeInterval:3600 * 2];
EKStructuredLocation* structuredLocation = [EKStructuredLocation locationWithTitle:location]; // locationWithTitle has the same behavior as event.location
CLLocation *mylocation = [[CLLocation alloc] initWithLatitude:[latval floatValue] longitude:[longval floatValue]];
structuredLocation.geoLocation = mylocation;
[event setValue:structuredLocation forKey:@"structuredLocation"];
SQLManager *sqlObj = [[SQLManager alloc] init];
[sqlObj createAndOpenDatabase] ;
[[sqlObj getAllUserInfo] valueForKey:@"alertValue"] ;
NSLog(@"%@",[[sqlObj getAllUserInfo] valueForKey:@"alertValue"]);
if (![[[sqlObj getAllUserInfo] valueForKey:@"alertValue"] isEqualToString:@"0"] && ![[[sqlObj getAllUserInfo] valueForKey:@"alertValue"] isEqualToString:@"4"])
{
if ([[[sqlObj getAllUserInfo] valueForKey:@"alertValue"] isEqualToString:@"1"])
{
NSLog(@"%@", event.startDate);
NSLog(@"%@", eventDate);
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm"];
NSString *endTimeString = [formatter stringFromDate:event.startDate];
NSDateFormatter *df = [[NSDateFormatter alloc] init] ;
[df setDateFormat:@"HH:mm"];
NSDate *date1 = [df dateFromString:endTimeString];
NSDate *date2 = [df dateFromString:@"08:00"];
NSTimeInterval interval = [date2 timeIntervalSinceDate:date1];
int hours = (int)interval / 3600;
int minutes = (interval - (hours*3600)) / 60;
NSString *timeDiff = [NSString stringWithFormat:@"%d:%02d", hours, minutes];
NSLog(@"%f",interval);
NSLog(@"%@",timeDiff);
EKAlarm *enterAlarm = [EKAlarm alarmWithRelativeOffset:interval];
[enterAlarm setProximity:EKAlarmProximityEnter];
[enterAlarm setStructuredLocation:structuredLocation];
[event addAlarm:enterAlarm];
event.alarms = [NSArray arrayWithObject:enterAlarm];
}
else if ([[[sqlObj getAllUserInfo] valueForKey:@"alertValue"] isEqualToString:@"2"])
{
NSTimeInterval interval = 60*120* -1;
EKAlarm *enterAlarm = [EKAlarm alarmWithRelativeOffset:interval];
[enterAlarm setProximity:EKAlarmProximityEnter];
[enterAlarm setStructuredLocation:structuredLocation];
event.alarms = [NSArray arrayWithObject:enterAlarm];
}
else if ([[[sqlObj getAllUserInfo] valueForKey:@"alertValue"] isEqualToString:@"3"])
{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm"];
NSString *endTimeString = [formatter stringFromDate:event.startDate];
NSDateFormatter *df = [[NSDateFormatter alloc] init] ;
[df setDateFormat:@"HH:mm"];
NSDate *date1 = [df dateFromString:endTimeString];
NSDate *date2 = [df dateFromString:@"08:00"];
NSTimeInterval interval = [date2 timeIntervalSinceDate:date1];
int hours = (int)interval / 3600;
int minutes = (interval - (hours*3600)) / 60;
NSString *timeDiff = [NSString stringWithFormat:@"%d:%02d", hours, minutes];
NSLog(@"%f",interval);
NSLog(@"%@",timeDiff);
EKAlarm *enterAlarm = [EKAlarm alarmWithRelativeOffset:interval];
[enterAlarm setProximity:EKAlarmProximityEnter];
[enterAlarm setStructuredLocation:structuredLocation];
[event addAlarm:enterAlarm];
NSTimeInterval interval1 = 60*120* -1;
EKAlarm *enterAlarm1 = [EKAlarm alarmWithRelativeOffset:interval1];
[enterAlarm1 setProximity:EKAlarmProximityEnter];
[enterAlarm1 setStructuredLocation:structuredLocation];
[event addAlarm:enterAlarm1];
event.alarms = [NSArray arrayWithObjects:enterAlarm,enterAlarm1, nil];
}
}
NSError *error = nil;
BOOL result = [eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&error];
if (result) {
if ([event respondsToSelector:@selector(calendarItemIdentifier)]) {
[[NSUserDefaults standardUserDefaults] setObject:event.eventIdentifier forKey:title];
NSLog(@"Event ID: %@",event.calendarItemIdentifier);
}
return YES;
} else {
// [[NSUserDefaults standardUserDefaults] setObject:event.UUID forKey:@"eventid"];
// unable to save event to the calendar
return NO;
}
}
+ (BOOL)removeEventAt:(NSDate*)eventDate withEndDate:(NSDate*)endDate withTitle:(NSString*)title inLocation:(NSString*)location
{
EKEventStore *eventStore = [[EKEventStore alloc] init];
NSLog(@"Event ID: %@",[[NSUserDefaults standardUserDefaults] objectForKey:title]);
BOOL result;
NSError* err = nil;
EKEvent *existingEvent = [eventStore eventWithIdentifier:[[NSUserDefaults standardUserDefaults] objectForKey:title]];
if (existingEvent != nil) {
EKReminder *reminder = [EKReminder reminderWithEventStore:eventStore];
[eventStore removeReminder:reminder commit:YES error:&err];
result = [eventStore removeEvent:existingEvent span:EKSpanThisEvent commit:YES error:&err];
}
if (result) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:title];
return YES;
} else {
NSLog(@"Error unsave event: %@", err);
// unable to save event to the calendar
return NO;
}
}
@end
2) Write This Following Code :
* ViewController ( Add & Remove Event )
ViewController.m :
#import "ViewController.h"
#import "MyCalendar.h"
@interface ViewController ()
{
//------------ string for time zone
//------------ string for time zone
NSString *tzName;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self fetchEvents];
// Call Method For Remove
// [self removeEvent];
}
#pragma mark Event Save to Local calender
- (void)fetchEvents
{
NSDate *startDate = [self setDateManually:@"2016-04-06" time:@"6:36 pm"] ;
NSDate *endDate = [self setDateManually:@"2016-04-10" time:@"9:41 pm"] ;
NSString *calLocation = [NSString stringWithFormat:@"Ahmedabad\nCTM"];
[MyCalendar requestAccess:^(BOOL granted, NSError *error) {
if (granted) {
BOOL result = [MyCalendar addEventAt:startDate withEndDate:endDate withTitle:@"Birth Day Party" inLocation:calLocation latitude:@"23.0300" longitude:@"72.5800"];
if (result) {
// added to calendar
} else {
// unable to create event/calendar
}
} else {
// you don't have permissions to access calendars
}
}];
}
-(NSDate *)setDateManually:(NSString *)dateStr time:(NSString *)time
{
NSString *temp = [NSString stringWithFormat:@"%@" , dateStr] ;
NSRange stringRange = {0, MIN([temp length], 10)};
stringRange = [temp rangeOfComposedCharacterSequencesForRange:stringRange];
NSString *shortString = [temp substringWithRange:stringRange];
NSDateFormatter* gmtDf = [[NSDateFormatter alloc] init] ;
NSString *timeZone=[self getTimezone];
[gmtDf setTimeZone:[NSTimeZone timeZoneWithName: timeZone]];
[gmtDf setDateFormat:@"yyyy-MM-dd"];
NSDate* gmtDate = [gmtDf dateFromString:shortString];
NSRange stringRange1 = {0, MIN([time length], 5)};
stringRange1 = [time rangeOfComposedCharacterSequencesForRange:stringRange1];
NSString *shortString1 = [time substringWithRange:stringRange1];
NSString *hourStr = [shortString1 componentsSeparatedByString:@":"][0];
NSString *minutesStr = [shortString1 componentsSeparatedByString:@":"][1];
NSString *timeSpecific = [time substringFromIndex:[time length] - 2]; //// AM , PM
NSInteger hour ;
NSInteger minutes ;
if([timeSpecific isEqualToString:@"am"])
{
hour = [hourStr intValue];
minutes = [minutesStr intValue];
}
else
{
hour = 12 + [hourStr intValue];
minutes = [minutesStr intValue];
}
NSCalendar* usCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian] ;
[usCalendar setTimeZone:[NSTimeZone timeZoneWithName:timeZone]];
NSDate *d = [usCalendar dateBySettingHour:hour minute:minutes second:0 ofDate:gmtDate options:0];
NSLog(@"date here : %@" , d) ;
return d ;
}
-(NSString *)getTimezone
{
NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// display in 12HR/24HR (i.e. 11:25PM or 23:25) format according to User Settings
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *currentTime = [dateFormatter stringFromDate:today];
NSLog(@"User's current time in their preference format:%@",currentTime);
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
tzName = [timeZone name];
return tzName;
}
-(void)removeEvent
{
NSDate *startDate = [self setDateManually:@"2016-04-06" time:@"6:36 pm"] ;
NSDate *endDate = [self setDateManually:@"2016-04-10" time:@"9:41 pm"] ;
[MyCalendar requestAccess:^(BOOL granted, NSError *error) {
if (granted) {
BOOL result = [MyCalendar removeEventAt:startDate withEndDate:endDate withTitle:@"Birth Day Party" inLocation:@"Ahmedabad"];
if (result) {
// added to calendar
} else {
// unable to create event/calendar
}
} else {
// you don't have permissions to access calendars
}
}];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
No comments:
Post a Comment