2011-01-21 16 views
5

Nie otrzymuję połączenia z moim zdarzeniemViewController: didCompleteWithAction: gdy narzędzie EKEventViewController zakończy edytowanie zdarzenia.EKEventViewDelegate didCompleteWithAction nie zostanie wywołany

Oto jak go ustawić:


- (void)showCalendar:(id)sender { 
    EKEventViewController *eventViewController = [[EKEventViewController alloc] init]; 

    eventViewController.delegate = self; 

    eventViewController.event = self.event; 

    // Allow event editing. 
    eventViewController.allowsEditing = YES; 

    [self.navigationController pushViewController:eventViewController animated:YES]; 
    [eventViewController release]; 
} 

mam protokół o mojej klasy i metoda była narzędzia by kopiowania i wklejania definicję z docs. Po prostu nie zostaje wywołana.

Jeśli używam obiektu EKEventEditViewController i odpowiadającego mu uczestnika, zostanie on wywołany, gdy zdarzenie zostanie zapisane.

Udało mi się również odtworzyć problem w kodzie SimpleEKDemo. Czy ktoś wie, co może być nie tak?

Mogę po prostu upuścić funkcjonalność widoku i przejść bezpośrednio do EKEventEditViewController, ale wolałbym nie.

+0

Otrzymuję to samo zachowanie. Delegat zostaje wezwany, gdy wydarzenie zostanie usunięte, ale nie podczas edycji. Przesyłam EKEventViewController na stos kontrolerów nawigacyjnych jako zwykły VC (tj. Nie modalnie). Jak prezentujesz to? –

+0

Jak pokazano w powyższym kodzie. Pcham to na stos. – Rob

Odpowiedz

1

w tym pliku .m należy zaimportować pliki EventKit/EventKit.h i EventKitUI/EventKitUI.h , aw pliku .h należy zaimplementować delegatów "EKEventViewDelegate".

nadzieję, że pomoże Możecie

+0

Miałem takie.Zauważyłem jednak, że delegat został wezwany, gdy zaakceptowałem lub odrzuciłem zaproszenie na wydarzenie. Po prostu nie zostanie wywołany, jeśli edytuję lokalnie utworzone zdarzenie z wewnątrz EKEventViewController – Rob

4

być nieco późno, aby być pomocne, ale nie miałem tego problemu, jak również.

Aby obejść to ja podklasy EKEventViewController, następnie w podklasie viewDidLoad Wymieniłem standardowego przycisku edycji jednego z własną rękę:


- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIBarButtonItem *editItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self.delegate action:@selector(editCalEvent)]; 

    self.navigationItem.rightBarButtonItem = editItem; 
} 


ten sposób, gdy chcesz edytować zdarzenie można skonfigurować własne EKEventEditViewController i określić jego delegata, aby odpowiedzieć na zmiany:


- (void)editCalEvent { 

    EKEventEditViewController *editController = [[EKEventEditViewController alloc] init]; 

    editController.event = editingEvent; 
    editController.eventStore = self.eventStore; 
    editController.editViewDelegate = self; 

    [self presentModalViewController:editController animated:YES]; 

    [editController release]; 

} 


Nadzieję, że pomaga.

2

miałem podobny problem, kiedy używać „pushViewController”, wynik jest, że to pójdzie do

- (void)navigationController:(UINavigationController *)navigationController 
    willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{} 

Ale po tym, jak zmienia się presentModalViewController, to pójdzie do eventViewController:didCompleteWithAction: kiedy Sporządzono/Anuluj/Usuń są prasowany.

+0

I wystąpił podobny problem z iPada. Początkowo próbował umieścić w modowym popover i nie otrzymał żadnych zwrotów. Przełączono na użycie presentModalViewController i wszystko jest w porządku. – RunningPink

0

To wydaje się dość oczywistym pominięciem w bibliotece. Moje obejście: Przedstawiam EKEventViewController w UINavigationController. Wykrywam zakończenie w metodzie viewWillAppear kontrolera, niż wciśnięto EKEventViewController na stos widoków. Użyj zmiennej boolean w tym kontrolerze widoku, aby śledzić i rozróżniać początkowy wygląd i ponowne pojawianie się w wyniku pojawienia się EKEventViewController. Istnieje ryzyko, że Twój kod zostanie wywołany w innym czasie, ale jeśli po prostu odświeżasz widok tabeli, itp., To powinno wystarczyć.

Powiązane problemy