iphone - प्रोग्रामिक रूप से आईफोन कैलेंडर में कस्टम इवेंट जोड़ें




calendar (7)

Google विचार एक अच्छा है, लेकिन समस्याएं हैं।

मैं Google कैलेंडर ईवेंट स्क्रीन सफलतापूर्वक खोल सकता हूं - लेकिन केवल मुख्य डेस्कटॉप संस्करण पर, और यह आईफ़ोन सफारी पर ठीक से प्रदर्शित नहीं होता है। Google मोबाइल कैलेंडर, जो सफारी पर ठीक से प्रदर्शित होता है, घटनाओं को जोड़ने के लिए एपीआई के साथ काम नहीं कर रहा है।

इस पल के लिए, मैं इस से एक अच्छा तरीका नहीं देख सकता।

कस्टम ऐप से आईफोन कैलेंडर में iCal ईवेंट जोड़ने का कोई तरीका है?


आप ईवेंट एपीआई का उपयोग करके ईवेंट जोड़ सकते हैं जैसे ट्रिस्टन रेखांकित और आप आईओएस कैलेंडर में दिखाए गए Google कैलेंडर ईवेंट भी जोड़ सकते हैं।

Google के एपीआई उद्देश्य-सी क्लाइंट का उपयोग करना

  - (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 के लिए अद्यतन करें

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.
    }


}

कैलेंडर उपयोग के लिए अनुमति जोड़ने के लिए भी मत भूलना


बनाए गए ईवेंट में एंडडेट सेट करना याद रखें, यह अनिवार्य है।

अन्यथा यह इस त्रुटि के साथ असफल हो जाएगा (लगभग चुपचाप):

"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
}];

स्विफ्ट 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 !")
            }
        }
    })
}

हां अभी भी इसके लिए कोई एपीआई नहीं है (2.1)। लेकिन ऐसा लगता है कि डब्ल्यूडब्ल्यूडीसी में बहुत से लोग पहले से ही कार्यक्षमता (स्वयं सहित) में दिलचस्पी रखते थे और सिफारिश निम्न साइट पर जाना और इसके लिए एक फीचर अनुरोध बनाना था। यदि पर्याप्त रुचि है, तो वे आईसीएएल.फ्रेमवर्क को सार्वजनिक एसडीके में ले जा सकते हैं।

https://developer.apple.com/bugreporter/


आईफोन ओएस 4.0 में कैलेंडर एक्सेस जोड़ा जा रहा है :

कैलेंडर एक्सेस
ऐप्स अब इवेंट किट के साथ कैलेंडर एप में सीधे ईवेंट बना और संपादित कर सकते हैं।
पुनरावर्ती घटनाएं बनाएं, प्रारंभ और समाप्ति समय सेट करें और उन्हें डिवाइस पर किसी भी कैलेंडर को असाइन करें।





calendar