menú emergente de iPhone como iPad popover?

¿Cómo puedo implementar este menú emergente en la aplicación iphone como un popover en ipad?

texto alternativo


EDITAR : Este es el mejor momento: https://github.com/runway20/PopoverView enter image description here

Eche un vistazo a la implementación de iPhone UIPopoverController: WEPopover

iOS 8 y posterior

A partir de iOS 8, puedes usar UIPopoverPresentationController para iPhones además de iPads.

enter image description here

Preparar

  • Agregue un UIBarButtonItem a su controlador de vista principal.
  • Agregue otro controlador de vista al guión gráfico. Cámbielo al tamaño que desea que sea el popover y agregue cualquier contenido que desee que tenga. Para mi ejemplo, acabo de agregar un UILabel . Si desea un menú completo, simplemente agregue una vista de tabla o una lista de botones.
  • Agregue un segue del elemento de botón de barra al controlador de vista que usará como popover. En lugar de show , elija Present as Popover .

enter image description here

  • Seleccione el segue en el guión gráfico y establezca el identificador en popoverSegue (o en cualquier cadena que lo haya llamado en el código).

enter image description here

  • En el inspector de atributos para el controlador de vista popover, marque Usar tamaño explícito preferido y confirme que tiene el tamaño que desea que sea.

enter image description here

Código

Este es el código para el controlador de vista principal que tiene el elemento de botón de barra en él.

 class ViewController: UIViewController, UIPopoverPresentationControllerDelegate { override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "popoverSegue" { let popoverViewController = segue.destinationViewController popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover popoverViewController.popoverPresentationController!.delegate = self } } // MARK: - UIPopoverPresentationControllerDelegate method func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { // Force popover style return UIModalPresentationStyle.None } } 

Popover en un punto de anclaje arbitrario

Si desea configurar el popover para que aparezca en algún lugar además de un elemento de botón de barra (en un UIButton por ejemplo), entonces debe configurar el sourceView y el sourceRect . Vea esta respuesta para más detalles.

enter image description here

Otras lecturas

El ejemplo anterior proviene principalmente del primer enlace.

  • iPad Style Popovers en el iPhone con Swift
  • Presentaciones de iOS 8 Popover
  • UIPopoverPresentationController en iOS 8 iPhone
  • Descripción general de las opciones emergentes en iOS

En el iPhone generalmente se usa una UIActionSheet para una stack de botones como esa. Se desliza desde la parte inferior, en lugar de aparecer al lado del botón, pero ese es el comportamiento estándar en iPhone.

Hay uno que es incluso mejor que WEPopover. Desarrollado por una compañía llamada 50pixels, se llama FPPopover .

Puede descargar FPPopover en https://github.com/50pixels/FPPopover

Tendría que instanciar manualmente una UIView utilizando una imagen de fondo personalizada o dibujar con transparencia, agregar algunos UIButtons (u otro tipo de vista personalizada) en la parte superior, y también manejar de alguna manera todos los toques fuera de esa vista.

Tenga en cuenta que es una interfaz de usuario no estándar. Una hoja de acciones sería más compatible con HIG.

Puede consultar WYPopoverController: https://github.com/sammcewan/WYPopoverController

La captura de pantalla anterior no es una UIActionSheet. Parece una subclase UIView simple con UIButtons personalizados encima. Así que adelante y cree la subclase según sus necesidades y luego agréguela como una subvista a su vista cada vez que la necesite.

Para obtener un popover desde un elemento de botón de barra del lado derecho en un controlador de navegación que es parte de un controlador de tabla de vista, lo siguiente funcionó para Swift 4 y Xcode 9.

  1. Siga los pasos de la respuesta a Suragch anterior (editada por la Comunidad).
  2. No implemente el Segue como se muestra en la respuesta anterior. Por algún motivo, la segue hace que el popover pase a pantalla completa a pesar de establecer el tamaño explícito.
  3. Dale a tu controlador de vista popover un título en el Inspector de Atributos
  4. Agregue el siguiente código en el controlador TableView donde se mostrará la ventana emergente.
  5. Modifique el identificador de cadena (el que está haciendo referencia aquí a un archivo Constant.swift)
  6. Modifique “como! FilterVC” para usar el título de su controlador de vista popover.

     /// Shows a filter popover view @IBAction func filterBtnPressed(_ sender: UIBarButtonItem) { let popover = storyboard?.instantiateViewController(withIdentifier: FILTER_VC) as! FilterVC popover.modalPresentationStyle = UIModalPresentationStyle.popover popover.popoverPresentationController?.backgroundColor = UIColor.green popover.popoverPresentationController?.delegate = self popover.popoverPresentationController?.backgroundColor = ColorPalette.Blue.Medium popover.popoverPresentationController?.sourceView = self.view popover.popoverPresentationController?.sourceRect = CGRect(x: self.view!.bounds.width, y: 0, width: 0, height: 0) popover.popoverPresentationController?.permittedArrowDirections = .up self.present(popover, animated: true) } } func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { return UIModalPresentationStyle.none }