2010-08-25 15 views
14

tengo mi UIPopoverController con uno mismo como delegado: recibo llamadas cuando toco fuera del controlador de popover, pero cuando me toque en el interior Quiero descartar también, así que uso -dismissPopoverAnimated: pero delegado no se llama en este caso. ¿Es esto normal? ¿Es esto un error o estoy haciendo algo mal?Descartar UIPopoverController con -dismissPopoverAnimated: no se llamará delegate?

newDocPopoverController = [[UIPopoverController alloc] initWithContentViewController:vc]; 
[newDocPopoverController setPopoverContentSize:CGSizeMake(240, 44*4)]; 
[newDocPopoverController presentPopoverFromBarButtonItem:sender 
       permittedArrowDirections:UIPopoverArrowDirectionAny 
                 animated:YES]; 
[newDocPopoverController setDelegate:self]; 

ACTUALIZACIÓN:

Oh, sin tener en cuenta el origen del problema (si es un fallo, o esto es el comportamiento previsto) llamando al delegado por mí resuelve el problema :)

Cuando el contentViewController Se toca la vista. Llamaré al padre. UIPopoverController delegará una llamada.

if ([parentPopoverController.delegate popoverControllerShouldDismissPopover:parentPopoverController]){ 
    [parentPopoverController dismissPopoverAnimated:YES]; 
    [parentPopoverController.delegate popoverControllerDidDismissPopover:parentPopoverController]; 
}r]; 
+0

me encontré con el mismo "problema", gracias por señalar cómo solucionarlo; es decir. descarte el controlador popover y luego llame al método de delegado. – Jack

Respuesta

22

Comportamiento normal esperado.

Citando al Apple docs en popoverControllerDidDismissPopover::

El controlador popover no llama a este método en respuesta a las llamadas programáticas al método dismissPopoverAnimated:. Si descarta el popover mediante programación, debe realizar cualquier acción de limpieza inmediatamente después de llamar al método dismissPopoverAnimated:.

+0

¡Gracias !, yo c. Creo que esa información también debería aparecer en la referencia de clase UIPopoverController, y no solo en su referencia de protocolo de delegado. ;) – nacho4d

22

programación el popoverControllerDidDismissPopover no consigue llamado y no despedidos, usted tiene que llamar al delegado a sí mismo:

[self.PopUp dismissPopoverAnimated:YES]; 
[self.PopUp.delegate popoverControllerDidDismissPopover:self.PopUp]; 

Dónde emergente es el padre UIPopoverController

espero que esto ayude

Cheers Al

+0

esto funciona, desafortunadamente es muy poco intuitivo. Diferente de los otros modelos que usan animaciones. Por ejemplo, si liberas la vista en la animación, rompería la aplicación, en cambio aquí si liberas el popover en popoverControllerDidDismissPopover funcionará perfectamente. –

0

configura primero el delegado;

yourPopup.delegate = auto;

y luego algunos en su código (Puede estar en una llamada de método particular debido a algún evento). use el siguiente código;

[self.yourPopUp dismissPopoverAnimated: YES];

Cuestiones relacionadas