2011-06-13 21 views
15

después de un poco de búsqueda, no pude encontrar una respuesta a algo que parece que sería útil para muchos.No descartar UIPopoverController cuando toque

¿Hay alguna manera de hacer que UIPopoverControllerno desestime cuando el usuario hace clic en algún lugar en el exterior? Quiero que el usuario tenga que usar un botón cancelar (Sí, me doy cuenta de que esto probablemente viola el HIG de Apple de alguna manera, pero es un caso raro y tiene sentido desde la perspectiva de la experiencia de usuario).

Gracias por cualquier ayuda.

+2

"Me doy cuenta de que este *** probablemente *** viola el HIG de Apple ..." ¿lo has leído? –

+0

Lo he leído bastantes veces, pero también tiene mucho sentido para el diseño (abrir un archivo desde otra aplicación para guardar), y también he visto bastantes aplicaciones hacerlo. :/ –

Respuesta

20

Puede hacer pruebas de golpe en donde ocurrió el golpe y en el delegado de su popover devuelve NO. - (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController

+1

+1: esto, esto es perfecto. debe haber rozado sobre ella en la documentación. Gracias. Tampoco se llama cuando se llama a dismissPopoverAnimated: por lo tanto, ni siquiera tienes que probarlo realmente. Gracias –

+1

NB: Este método delegado (de hecho todos los métodos de 'UIPopoverControllerDelegate') ha sido desaprobado: https://developer.apple.com/documentation/uikit/uipopovercontrollerdelegate/1624661-popovercontrollershoulddismisspo?language=objc. – ajbmdi

25

Simplemente configure la propiedad modalInPopover en el UIViewController que se muestra en el UIPopoverController.

popover = [[UIPopoverController alloc] initWithContentViewController:content]; 
content.modalInPopover = YES; 
[popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

Tenga en cuenta que, as of iOS5, usted tiene que fijar modalInPopover interior de -viewDidAppear.

1

Entonces, me doy cuenta de que esta es una vieja pregunta. Sin embargo, hay una respuesta más fácil para cualquiera que busque una solución hoy.

Si usa un Storyboard Segue, puede establecer la propiedad de paso en la transición permitiendo la interacción con otros objetos en la vista. Si lo hace, al hacer clic fuera de los límites del popover no se cerrará el popover.

Aquí hay alguna información más: What are Anchor and Passthrough used for in popover segues?

Y aquí es un extracto de la documentación de Apple:

Para permitir al usuario interactuar con las vistas especificadas y no descarta la popover, puede asignar una o más vistas a la propiedad passthroughViews .

Cuestiones relacionadas