जवाबों:
Apple दस्तावेज़ीकरण के आधार पर , यह iOS 6.0 के रूप में थोड़ा बदल गया है।
1) आपको "requestAccessToEntityType: पूर्ण:" के माध्यम से उपयोगकर्ता के कैलेंडर तक पहुंच का अनुरोध करना चाहिए और एक ब्लॉक के अंदर इवेंट हैंडलिंग को निष्पादित करना चाहिए।
2) अब आपको अपना ईवेंट करने की ज़रूरत है या "सेव" परम को अपने सेव / रिमूव कॉल में पास करें
बाकी सब वही रहता है ...
EventKit ढांचे और #import <EventKit/EventKit.h>
अपने कोड में जोड़ें।
मेरे उदाहरण में, मेरे पास एक NSString * saveEventId उदाहरण संपत्ति है।
एक घटना जोड़ने के लिए:
EKEventStore *store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted) { return; }
EKEvent *event = [EKEvent eventWithEventStore:store];
event.title = @"Event Title";
event.startDate = [NSDate date]; //today
event.endDate = [event.startDate dateByAddingTimeInterval:60*60]; //set 1 hour meeting
event.calendar = [store defaultCalendarForNewEvents];
NSError *err = nil;
[store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
self.savedEventId = event.eventIdentifier; //save the event id if you want to access this later
}];
इवेंट निकालें:
EKEventStore* store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted) { return; }
EKEvent* eventToRemove = [store eventWithIdentifier:self.savedEventId];
if (eventToRemove) {
NSError* error = nil;
[store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error];
}
}];
यह आपके डिफ़ॉल्ट कैलेंडर में ईवेंट जोड़ता है, यदि आपके पास कई कैलेंडर हैं तो आपको पता चल जाएगा कि कौन सा है
स्विफ्ट संस्करण
आपको EventKit ढांचे को आयात करने की आवश्यकता है
import EventKit
कार्यक्रम जोड़ें
let store = EKEventStore()
store.requestAccessToEntityType(.Event) {(granted, error) in
if !granted { return }
var event = EKEvent(eventStore: store)
event.title = "Event Title"
event.startDate = NSDate() //today
event.endDate = event.startDate.dateByAddingTimeInterval(60*60) //1 hour long meeting
event.calendar = store.defaultCalendarForNewEvents
do {
try store.saveEvent(event, span: .ThisEvent, commit: true)
self.savedEventId = event.eventIdentifier //save event id to access this particular event later
} catch {
// Display error to user
}
}
ईवेंट निकालें
let store = EKEventStore()
store.requestAccessToEntityType(EKEntityTypeEvent) {(granted, error) in
if !granted { return }
let eventToRemove = store.eventWithIdentifier(self.savedEventId)
if eventToRemove != nil {
do {
try store.removeEvent(eventToRemove, span: .ThisEvent, commit: true)
} catch {
// Display error to user
}
}
}
आप OS 4.0 में इवेंट किट ढांचे का उपयोग करके ऐसा कर सकते हैं।
खिड़की के बाईं ओर समूह और फ़ाइलें नेविगेटर में फ्रेमवर्क समूह पर राइट क्लिक करें। 'जोड़ें' तब 'मौजूदा फ़्रेमवर्क्स' और फिर 'EventKit.Framework' चुनें।
फिर आपको इस तरह कोड के साथ घटनाओं को जोड़ने में सक्षम होना चाहिए:
#import "EventTestViewController.h"
#import <EventKit/EventKit.h>
@implementation EventTestViewController
- (void)viewDidLoad {
[super viewDidLoad];
EKEventStore *eventStore = [[EKEventStore alloc] init];
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
event.title = @"EVENT TITLE";
event.startDate = [[NSDate alloc] init];
event.endDate = [[NSDate alloc] initWithTimeInterval:600 sinceDate:event.startDate];
[event setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError *err;
[eventStore saveEvent:event span:EKSpanThisEvent error:&err];
}
@end
हां, अभी भी इसके लिए कोई एपीआई नहीं है (2.1)। लेकिन ऐसा लग रहा था कि डब्ल्यूडब्ल्यूडीसी में बहुत सारे लोग पहले से ही कार्यक्षमता (खुद सहित) में रुचि रखते थे और सिफारिश थी कि नीचे की साइट पर जाएं और इसके लिए एक फीचर अनुरोध बनाएं। यदि पर्याप्त रुचि है, तो वे सार्वजनिक SDK को ICal.framework स्थानांतरित करना समाप्त कर सकते हैं।
IPhone OS 4.0 में कैलेंडर का उपयोग जोड़ा जा रहा है :
कैलेंडर एक्सेस
ऐप्स अब ईवेंट किट के साथ सीधे कैलेंडर ऐप में ईवेंट बना और संपादित कर सकते हैं।
आवर्ती ईवेंट बनाएं, प्रारंभ और समाप्ति समय सेट करें और उन्हें डिवाइस पर किसी भी कैलेंडर को असाइन करें।
आप ईवेंट API का उपयोग करके इवेंट जोड़ सकते हैं जैसे ट्रिस्टन उल्लिखित है और आप Google कैलेंडर ईवेंट भी जोड़ सकते हैं जो iOS कैलेंडर में दिखाई देता है।
का उपयोग करते हुए गूगल के एपीआई ऑब्जेक्टिव-सी क्लाइंट
- (void)addAnEvent {
// Make a new event, and show it to the user to edit
GTLCalendarEvent *newEvent = [GTLCalendarEvent object];
newEvent.summary = @"Sample Added Event";
newEvent.descriptionProperty = @"Description of sample added event";
// We'll set the start time to now, and the end time to an hour from now,
// with a reminder 10 minutes before
NSDate *anHourFromNow = [NSDate dateWithTimeIntervalSinceNow:60*60];
GTLDateTime *startDateTime = [GTLDateTime dateTimeWithDate:[NSDate date]
timeZone:[NSTimeZone systemTimeZone]];
GTLDateTime *endDateTime = [GTLDateTime dateTimeWithDate:anHourFromNow
timeZone:[NSTimeZone systemTimeZone]];
newEvent.start = [GTLCalendarEventDateTime object];
newEvent.start.dateTime = startDateTime;
newEvent.end = [GTLCalendarEventDateTime object];
newEvent.end.dateTime = endDateTime;
GTLCalendarEventReminder *reminder = [GTLCalendarEventReminder object];
reminder.minutes = [NSNumber numberWithInteger:10];
reminder.method = @"email";
newEvent.reminders = [GTLCalendarEventReminders object];
newEvent.reminders.overrides = [NSArray arrayWithObject:reminder];
newEvent.reminders.useDefault = [NSNumber numberWithBool:NO];
// Display the event edit dialog
EditEventWindowController *controller = [[[EditEventWindowController alloc] init] autorelease];
[controller runModalForWindow:[self window]
event:newEvent
completionHandler:^(NSInteger returnCode, GTLCalendarEvent *event) {
// Callback
if (returnCode == NSOKButton) {
[self addEvent:event];
}
}];
}
स्विफ्ट 4.0 कार्यान्वयन:
पृष्ठ के शीर्ष पर आयात का उपयोग करें import EventKit
फिर
@IBAction func addtoCalendarClicked(sender: AnyObject) {
let eventStore = EKEventStore()
eventStore.requestAccess( to: EKEntityType.event, completion:{(granted, error) in
if (granted) && (error == nil) {
print("granted \(granted)")
print("error \(error)")
let event = EKEvent(eventStore: eventStore)
event.title = "Event Title"
event.startDate = Date()
event.endDate = Date()
event.notes = "Event Details Here"
event.calendar = eventStore.defaultCalendarForNewEvents
var event_id = ""
do {
try eventStore.save(event, span: .thisEvent)
event_id = event.eventIdentifier
}
catch let error as NSError {
print("json error: \(error.localizedDescription)")
}
if(event_id != ""){
print("event added !")
}
}
})
}
दशरथ उत्तर के लिए स्विफ्ट 4 के लिए अपडेट करें
import UIKit
import EventKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let eventStore = EKEventStore()
eventStore.requestAccess( to: EKEntityType.event, completion:{(granted, error) in
if (granted) && (error == nil) {
let event = EKEvent(eventStore: eventStore)
event.title = "My Event"
event.startDate = Date(timeIntervalSinceNow: TimeInterval())
event.endDate = Date(timeIntervalSinceNow: TimeInterval())
event.notes = "Yeah!!!"
event.calendar = eventStore.defaultCalendarForNewEvents
var event_id = ""
do{
try eventStore.save(event, span: .thisEvent)
event_id = event.eventIdentifier
}
catch let error as NSError {
print("json error: \(error.localizedDescription)")
}
if(event_id != ""){
print("event added !")
}
}
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
स्विफ्ट-4.2 में वर्किंग कोड
import UIKit
import EventKit
import EventKitUI
class yourViewController: UIViewController{
let eventStore = EKEventStore()
func addEventToCalendar() {
eventStore.requestAccess( to: EKEntityType.event, completion:{(granted, error) in
DispatchQueue.main.async {
if (granted) && (error == nil) {
let event = EKEvent(eventStore: self.eventStore)
event.title = self.headerDescription
event.startDate = self.parse(self.requestDetails.value(forKey: "session_time") as? String ?? "")
event.endDate = self.parse(self.requestDetails.value(forKey: "session_end_time") as? String ?? "")
let eventController = EKEventEditViewController()
eventController.event = event
eventController.eventStore = self.eventStore
eventController.editViewDelegate = self
self.present(eventController, animated: true, completion: nil)
}
}
})
}
}
अब हमें ईवेंट स्क्रीन मिलेगी और यहां आप अपनी सेटिंग्स को भी संशोधित कर सकते हैं:
अब रद्द करने और ईवेंट स्क्रीन की ईवेंट बटन कार्रवाई को जोड़ने के लिए प्रतिनिधि विधि जोड़ें:
extension viewController: EKEventEditViewDelegate {
func eventEditViewController(_ controller: EKEventEditViewController, didCompleteWith action: EKEventEditViewAction) {
controller.dismiss(animated: true, completion: nil)
}
}
नोट: NSCalendarsUsageDescription कुंजी को इंफ़ॉर्म प्लिस्ट में जोड़ना न भूलें ।
एंडेडेट को बनाई गई घटना पर सेट करना याद रखें, यह अनिवार्य है।
अन्यथा यह त्रुटि के साथ विफल (लगभग चुपचाप) होगा:
"Error Domain=EKErrorDomain Code=3 "No end date has been set." UserInfo={NSLocalizedDescription=No end date has been set.}"
मेरे लिए पूरा काम कोड है:
EKEventStore *store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted) { return; }
EKEvent *calendarEvent = [EKEvent eventWithEventStore:store];
calendarEvent.title = [NSString stringWithFormat:@"CEmprendedor: %@", _event.name];
calendarEvent.startDate = _event.date;
// 5 hours of duration, we must add the duration of the event to the API
NSDate *endDate = [_event.date dateByAddingTimeInterval:60*60*5];
calendarEvent.endDate = endDate;
calendarEvent.calendar = [store defaultCalendarForNewEvents];
NSError *err = nil;
[store saveEvent:calendarEvent span:EKSpanThisEvent commit:YES error:&err];
self.savedEventId = calendarEvent.eventIdentifier; //saving the calendar event id to possibly deleted them
}];
Google का विचार एक अच्छा है, लेकिन इसमें समस्याएं हैं।
मैं Google कैलेंडर ईवेंट स्क्रीन को सफलतापूर्वक खोल सकता हूं - लेकिन केवल मुख्य डेस्कटॉप संस्करण पर, और यह आईफोन सफारी पर ठीक से प्रदर्शित नहीं होता है। Google मोबाइल कैलेंडर, जो सफारी पर ठीक से प्रदर्शित होता है, घटनाओं को जोड़ने के लिए एपीआई के साथ काम नहीं करता है।
फिलहाल, मैं इससे अच्छा तरीका नहीं देख सकता।
सिम्पल .... टैपकु लाइब्रेरी का उपयोग करें .... आप उस शब्द को गूगल कर सकते हैं और उसका उपयोग कर सकते हैं ... उसके ओपन सोर्स ... आनंद ..... उन कोड के साथ बगिंग की कोई आवश्यकता नहीं है ....