UIActionSheet de Popover con iOS8 GM
uipopovercontroller uialertcontroller (5)
En realidad, es algo con errores (creo) en Xcode para los diseños de iPhone y iPad por ahora.
- En iPhone, el mismo código funciona perfectamente y puede ver el mensaje de alerta en la misma posición (siempre). Pero para iPad, debe definir la posición del cuadro de alerta con
alert.popoverPresentationController.sourceView = self.view; alert.popoverPresentationController.sourceRect = CGRectMake(self.view.bounds.size.width / 2.0 - 105, self.view.bounds.size.height / 2.0 + 70, 1.0, 1.0);
alert.popoverPresentationController.sourceView = self.view; alert.popoverPresentationController.sourceRect = CGRectMake(self.view.bounds.size.width / 2.0 - 105, self.view.bounds.size.height / 2.0 + 70, 1.0, 1.0);
105 y 70 son las diferencias de dimensión aproximadas para el diseño vertical del iPad debido a los diferentes puntos de anclaje. - En el diseño de iPhone,
UIAlertController
viene con ''Vista modal'', pero desafortunadamente, si usa el mismo código para iPad, no será una ''Vista modal''. Lo que significa que necesita escribir código adicional para deshabilitar los toques en el diseño del iPad. Creo que es raro. - En el diseño de iPad debe tener en cuenta que el punto de anclaje es diferente. Es el punto de triángulo de burbuja, no la esquina superior izquierda de AlertView.
Estas son las cosas raras que veo. Creo que debe haber un estándar y si alguien quiere cumplir con los estándares, está bien, puede haber otras opciones.
¿Alguien está recibiendo este mensaje al intentar mostrar UIActionSheet desde popover?
Su aplicación ha presentado un UIAlertController () de estilo UIAlertControllerStyleActionSheet. El modalPresentationStyle de un UIAlertController con este estilo es UIModalPresentationPopover. Debe proporcionar información de ubicación para esta ventana emergente a través del controlador de alerta popoverPresentationController. Debe proporcionar un sourceView y sourceRect o un barButtonItem. Si no se conoce esta información cuando presenta el controlador de alerta, puede proporcionarla en el método -prepareForPopoverPresentation de UIPopoverPresentationControllerDelegate.
Anteriormente, en GM, utilicé algunas soluciones para convertir UIActionSheet en UIAlertController y esto funciona bien. Sin embargo, parece que Apple intentó resolver los problemas de UIActionSheet y no quería utilizar mi solución alternativa, pero parece que no tengo otra opción ...
Para soportar iPad, incluye este código:
alertView.popoverPresentationController?.sourceView = self.view
alertView.popoverPresentationController?.sourceRect = self.view.bounds
// this is the center of the screen currently but it can be any point in the view
self.presentViewController(alertView, animated: true, completion: nil)
Si está presentando la hoja de acción después de que el usuario haga una selección en una celda dentro de un UITableView
. Encontré que esto funciona decentemente bien:
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Directions"
message:@"Select mode of transportation:"
preferredStyle:UIAlertControllerStyleActionSheet];
alert.popoverPresentationController.sourceView = cell;
alert.popoverPresentationController.sourceRect = cell.bounds;
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
//...
[self presentViewController:alert animated:YES completion:nil];
UIAlertController es solo para iOS8 y, como necesito ser compatible con iOS7, lo estoy usando. Me encontré con esto en una vista maestra en un diseño Maestro / Detalle en iPad. Pude evitarlo (no arreglarlo exactamente) levantando el UIActionSheet desde el UISplitViewController principal utilizando [actionSheet showInView:]. Buena suerte.
popoverPresentationController
proporcionar popoverPresentationController
para soporte de iPad. En esto, puede especificar barButtonItem
o sourceView
. Este otro hilo puede ayudarte: Swift UIAlertController - ActionSheet iPad iOS8 Crashes