2011-01-21 14 views
5

non ho ricevuto una chiamata al mio eventViewController: didCompleteWithAction: quando termina l'EKEventViewController edting un evento.EKEventViewDelegate didCompleteWithAction non sempre chiamato

Ecco come impostare il tutto:


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

io ho il protocollo sulla mia classe e il metodo è stato attrezzi di copiando e incollando la definizione dei documenti. Semplicemente non viene chiamato.

Se uso l'EKEventEditViewController e il suo corrispondente delegato, quindi questo non vengono chiamati quando l'evento viene salvato.

sono stato in grado di riprodurre il problema nel codice SimpleEKDemo stesso pure. Qualcuno sa cosa potrebbe essere sbagliato?

ho potuto solo cadere la funzionalità di visualizzazione e andare dritto al EKEventEditViewController, ma io non preferisco.

+0

sto ottenendo lo stesso comportamento. Il delegato viene chiamato quando l'evento viene eliminato, ma non quando viene modificato. Sto spingendo EKEventViewController sul mio controller di navigazione come stack regolare VC (cioè non modally). Come lo stai presentando? –

+0

Come mostrato nel codice sopra. Lo sto spingendo in pila. – Rob

risposta

1

in questo file .m è necessario importare EventKit/EventKit.h ed EventKitUI/EventKitUI.h e nel file .h è necessario implementare i delegati 'EKEventViewDelegate'.

spero che aiuta a

+0

Ho avuto quelli.Tuttavia, ho appena notato che il delegato è stato chiamato quando ho accettato o rifiutato un invito all'evento. Semplicemente non mi chiamano se modifico un evento creato localmente da EKEventViewController – Rob

4

potrebbe essere un po 'tardi per essere utile, ma ho avuto questo problema pure.

Per aggirare l'ostacolo che una sottoclasse EKEventViewController, poi nella sottoclasse viewDidLoad ho sostituito il pulsante standard di modifica con uno dei miei:


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

    self.navigationItem.rightBarButtonItem = editItem; 
} 


questo modo quando si desidera modificare un evento, è possibile impostare il proprio EKEventEditViewController e specificare il suo delegato per rispondere alle modifiche:


- (void)editCalEvent { 

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

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

    [self presentModalViewController:editController animated:YES]; 

    [editController release]; 

} 


Spero che questo aiuti.

2

ho avuto il problema simile quando uso "pushViewController", il risultato è che si andrà a

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

Ma dopo ho cambiato per presentModalViewController, andrà a eventViewController:didCompleteWithAction: quando Fatto/Annulla/Elimina sono premuto.

+0

Ho riscontrato un problema simile con iPad. Inizialmente provato a posizionare in un pop-up modale e non ha ricevuto alcuna richiamata. Passato a usare presentModalViewController e tutto va bene. – RunningPink

0

Questo sembra essere un'omissione abbastanza evidente nella biblioteca. La mia soluzione: sto presentando EKEventViewController in un UINavigationController. Rilevo il completamento nel metodo viewWillAppear del controller che ha spinto EKEventViewController nello stack di visualizzazione. Utilizzare una variabile booleana in questo controller di visualizzazione per tracciare e differenziare tra l'aspetto iniziale e la ricomparsa a causa del popping di EKEventViewController. C'è il rischio che il tuo codice venga richiamato in altri momenti, ma se stai solo aggiornando le visualizzazioni di tabella, ecc., Questo dovrebbe essere sufficiente.

Problemi correlati