UIActionSheet de Popover con iOS8 GM

¿Alguien recibe este post mientras intenta 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 location para este popover a través del popoverPresentationController del controller de alertas. Debe proporcionar una fuenteView y sourceRect o una barraButtonItem. Si no se conoce esta información cuando presenta el controller de alerta, puede proporcionarla en el método UIPopoverPresentationControllerDelegate -prepareForPopoverPresentation.

Anteriormente al GM, utilicé alguna solución para convertir UIActionSheet a UIAlertController y esto está funcionando bien. Sin embargo, parece que Apple intentó resolver los problemas de UIActionSheet y no quería usar mi solución, pero parece que no tengo otra opción …

Para admitir iPad, incluya 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 presenta la hoja de acción después de que el usuario realiza una selección en una celda dentro de una UITableView . Encontré que esto funciona decentemente bien:

 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Directions" message:@"Select mode of transportation:" prefernetworkingStyle: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]; 

popoverPresentationController proporcionar popoverPresentationController con popoverPresentationController para iPad. En esto, puede especificar barButtonItem o sourceView . Este otro hilo te puede ayudar: Swift UIAlertController – ActionSheet iPad iOS8 Causas

De hecho, es algo sofocante (creo) en Xcode para los layouts de iPhone y iPad por ahora.

  1. En el mismo código de iPhone funciona perfecto y puede ver el post de alerta en la misma position (siempre). Pero para iPad, debe definir la position 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 aproximada para el layout de retrato de iPad debido a un punto de anclaje diferente.
  2. En el layout de iPhone, UIAlertController viene con 'Modal View', 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 desactivar toques en el layout de iPad. Creo que es raro
  3. En el layout de iPad, debe tener en count que el punto de anclaje es diferente. Es el punto del triángulo de la burbuja, no la parte superior izquierda de AlertView.

Estas son las cosas extrañas que veo. Creo que debe haber un estándar y si alguien quiere cumplir con los estándares, bien, puede haber otras opciones.

UIAlertController solo es iOS8 y necesito admitir iOS7, lo estoy usando. Me encontré con esto en una vista maestra en un layout Master / Detail en iPad. Pude evitarlo (no exactamente solucionarlo) elevando el UIActionSheet del UISplitViewController primario usando [actionSheet showInView:]. Buena suerte.