2016-11-16 1 views
1

Ich versuche, Ereignisse auf dem Kalender in iOS-Geräten hinzuzufügen, für jetzt muss ich ein Ereignis zum Kalender defaultCalendarForNewEvents hinzufügen, aber was ich möchte, ist in der Lage zu wählen Kalender, der bereits erstellt wurde, in dem ich das Ereignis hinzufügen möchte. Auswählen des Kalenders zum Hinzufügen eines iOS-Ereignisses

Zum Beispiel in der folgenden Capture wird es gesehen, dass es ein iPhone-Kalender ist, und dann kann 1 gibt oder mehrere gmail erstellt

introducir la descripción de la imagen aquí

Was ich will ist zu tun, dass Sie die wählen können Kalender in dem Sie das Ereignis hinzufügen möchten, muss dieser Kalender früher erstellt werden, nicht dass das System den Kalender auswählt.

Irgendwelche Empfehlungen? Irgendwelche Beispiele?

P. D: Ich beginne zu Code mit und

-Code Ereignisse hinzuzufügen, ich bin zu testen und es funktioniert:

- (void) addEventCalendar: (Evento_DTO *) evento { 
    EKEventStore *eventStore = [[EKEventStore alloc] init]; 
    EKEvent *event = [EKEvent eventWithEventStore:eventStore]; 
    EKReminder *reminder = [EKReminder reminderWithEventStore:eventStore]; 


    event.title = @"Test Event"; 
    reminder.title = @"Test reminder"; 

    NSDate *cDate = [NSDate date]; 
    NSLog(@"current date %@", cDate); 


    /*NSDateComponents *startDateComponents = [[[NSDateComponents alloc] init] autorelease]; 
    [startDateComponents setDay:12]; 
    [startDateComponents setMonth:12]; 
    [startDateComponents setYear:2012]; 
    [startDateComponents setHour:12]; 
    [startDateComponents setMinute:18]; 


    NSDateComponents *endDateComponents = [[[NSDateComponents alloc] init] autorelease]; 
    [endDateComponents setDay:12]; 
    [endDateComponents setMonth:12]; 
    [endDateComponents setYear:2012]; 
    [endDateComponents setHour:12]; 
    [endDateComponents setMinute:18]; 
    [endDateComponents setSecond:20];*/ 


    //event.startDate = cDate; 
    //event.endDate = [cDate dateByAddingTimeInterval:15.0]; 

    event.startDate = [cDate dateByAddingTimeInterval:((5*60*60) + (30 * 60) + 15)]; 
    event.endDate = [cDate dateByAddingTimeInterval:((5*60*60) + (30 * 60) + 30)]; 


    //event.startDate = [[NSCalendar currentCalendar] dateFromComponents:startDateComponents]; 
    //event.endDate = [[NSCalendar currentCalendar] dateFromComponents:endDateComponents]; 

    reminder.completionDate = [cDate dateByAddingTimeInterval:((5*60*60) + (30 * 60) + 10)]; 

    NSLog(@"startdate %@", event.startDate); 
    NSLog(@"enddate %@", event.endDate); 


    [event setCalendar:[eventStore defaultCalendarForNewEvents]]; 

    //[reminder setCalendar:[eventStore defaultCalendarForNewReminders]]; 

    NSError *error = nil; 

    [eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&error]; 
    //[eventStore saveReminder:reminder commit:YES error:&error]; 
} 

Antwort

2

Zunächst einmal danke @NarendraPandey und @nehamishra für die Hilfe zur Verfügung gestellt

ich die Lösung für mein Problem gegeben haben, die dann die Lösung, falls jemand setzen Sie bedienen.

Ich habe ein Verfahren geschaffen, um die verfügbaren Kalender zu erhalten, die lokale und die von gmail sind, ist der Code die folgende:

- (NSMutableArray*) getCalendars { 

    NSMutableArray *res =[[NSMutableArray alloc] init]; 

    EKEventStore *eventStore = [[EKEventStore alloc] init]; 
    EKEntityType type = EKEntityTypeEvent; 
    NSArray *calendars = [eventStore calendarsForEntityType: type]; 

    for (EKCalendar *cal in calendars) 
    { 
     if (cal.type == EKCalendarTypeCalDAV || cal.type == EKCalendarTypeLocal ){ 
      NSLog(@"cal nombre:- %@ ", cal.title); 
      [res addObject: cal]; 

     } 
    } 

    return res; 
} 

dann die Liste der Kalender zu zeigen, so dass der Benutzer eine auswählen können und die Ereignisse eintreten dort fand ich, dass Ihave eine Action Sheet zu verwenden, obwohl ich gesehen habe, dass es veraltet war nach einigen Forum Kommentare von Stackoverflow, so habe ich UIAlertController, wie folgt sind:

NSMutableArray* cals = [self getCalendars]; 

if([cals count] > 0){//Comprobamos que existan calendarios 

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:AMLocalizedString(@"calendar_dialog_info", @"") 
      message:nil 
      preferredStyle:UIAlertControllerStyleActionSheet]; 

    for (EKCalendar *cal in cals) 
    { 
     UIAlertAction *calAction = [UIAlertAction actionWithTitle: cal.title 
     style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { 

     NSLog(@"You pressed button %@ ", cal.title); 

     [self descargarCalendario: cal]; 
      }]; 

      [alert addAction:calAction]; 
    } 

    UIAlertAction* cancel = [UIAlertAction 
             actionWithTitle:AMLocalizedString(@"cancelar", @"") 
       style:UIAlertActionStyleCancel 
       handler:^(UIAlertAction * action) 
       { 
        [alert dismissViewControllerAnimated:YES completion:nil]; 

       }]; 

     [alert addAction:cancel]; 

     [self presentViewController:alert animated:YES completion:nil]; 
}else{ 
    NSLog(@"No hay calendarios"); 
} 

Wo dieDie Funktionist dafür zuständig, einige Ereignisse von einem Webdienst herunterzuladen und sie dem ausgewählten Kalender hinzuzufügen.

in der folgenden Ansicht Resultierende den Kalender wählen:

enter image description here

Und der Code das Ereignis an den ausgewählten Kalender hinzuzufügen ist:

-(void)addEventOnCalendar: (EKCalendar *) cal{ 

    EKEventStore *store = [EKEventStore new]; 
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
     if (!granted) { 
      return; 
     } 
     EKEvent *event = [EKEvent eventWithEventStore:store]; 
     event.title = @"Test"; 

     NSDate *cDate = [NSDate date]; 
     event.startDate = [cDate dateByAddingTimeInterval:((5*60*60) + (30 * 60) + 15)]; 
     event.endDate = [cDate dateByAddingTimeInterval:((5*60*60) + (30 * 60) + 15)]; 

     //event.calendar = [store defaultCalendarForNewEvents]; 
     event.calendar = [store calendarWithIdentifier: cal.calendarIdentifier]; 

     NSError *err = nil; 
     [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; 

    }]; 
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Message" message:@"Event Successfully added " delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil]; 
    [alert show]; 

} 

Ich hoffe, dass es jemand hilft.

1

dieses Versuchen von neuen Kalender zu erstellen.

-(EKEvent*)createEvent:(EKEventStore*)eventStore{ 
     EKEvent *event = [EKEvent eventWithEventStore:eventStore]; 
     event.title = @"New Event"; 

     event.startDate = [NSDate date]; 
     event.endDate =[NSDate date]; 

     [email protected]"Location"; 
     event.allDay = YES; 
     event.notes [email protected]"Event description"; 

     NSString* calendarName = @"Calendar"; 
     EKCalendar* calendar; 
     EKSource* localSource; 
     for (EKSource *source in eventStore.sources){ 
      if (source.sourceType == EKSourceTypeCalDAV && 
       [source.title isEqualToString:@"iCloud"]){ 
       localSource = source; 
       break; 
      } 
     } 
     if (localSource == nil){ 
      for (EKSource *source in eventStore.sources){ 
       if (source.sourceType == EKSourceTypeLocal){ 
        localSource = source; 
        break; 
       } 
      } 
     } 
     calendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:eventStore]; 
     calendar.source = localSource; 
     calendar.title = calendarName; 
     NSError* error; 
     [eventStore saveCalendar:calendar commit:YES error:&error]; 
     return event; 
} 

enter image description here

enter image description here

Hoffe, dass es funktionieren wird. Lassen Sie mich wissen, wenn Sie Fragen haben.

+1

Vielen Dank Ich werde versuchen, um zu sehen, ob es mir dient, und ich werde Ihnen sagen, wenn es mir – Joacer

+1

Ich versuche Ihren Code und funktioniert gut, um einen neuen Kalender zu erstellen, aber ich möchte in der Lage sein zu wählen ein Kalender, der bereits erstellt wurde und Ereignisse in diesem Kalender hinzufügen, vielleicht war meine Beschreibung des Problems nicht klar oder führt zu Verwirrung, jetzt werde ich es bearbeiten – Joacer

+0

Ja im zweiten Screenshot können Sie sehen. Sie können den Kalender aus dem verfügbaren Kalender auswählen. –

1
-(void)addEventOnCalendar{ 
    EKEventStore *store = [EKEventStore new]; 
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
     if (!granted) { 
      return; 
     } 
     EKEvent *event = [EKEvent eventWithEventStore:store]; 
     event.title = @"What ever You want to save as your event"; 
     event.startDate = selectedDate; 

     event.endDate = selectedDate1; 

     event.calendar = [store defaultCalendarForNewEvents]; 
     NSError *err = nil; 
     [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; 

    }]; 
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Message" message:@"Event Successfully added in Calender" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil]; 
    [alert show]; 
} 
+0

Danke für Deine Antwort – Joacer

Verwandte Themen