iPhone menú emergente como popover iPad?


¿Cómo puedo implementar este menú emergente en la aplicación de iphone como una ventana emergente en el ipad?

texto alt


EDITAR : Este es el mejor en este momento: https://github.com/runway20/PopoverView introduzca la descripción de la imagen aquí

Author: elp, 2011-01-22

8 answers

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

 21
Author: olfuerniss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-24 09:25:43

IOS 8 y posteriores

Comenzando con iOS 8, puede usar UIPopoverPresentationController para iPhones además de iPads.

introduzca la descripción de la imagen aquí

Configuración

  • Agrega un UIBarButtonItem a tu Controlador de Vista principal.
  • Agregue otro controlador de vista al guion gráfico. Cámbialo al tamaño que quieras que tenga el popover y añade cualquier contenido que quieras que tenga. Para mi ejemplo acabo de añadir un UILabel. Si desea un menú completo, simplemente agregue una vista de tabla o una lista de botón.
  • Agregue un segue desde el elemento del botón de barra al controlador de vista que usará como ventana emergente. En lugar de show, elija Present as Popover.

introduzca la descripción de la imagen aquí

  • Seleccione el segue en el storyboard y establezca el identificador en popoverSegue (o cualquier cadena que haya llamado en el código).

introduzca la descripción de la imagen aquí

  • En el inspector de atributos para el controlador de vista emergente, marque Use el tamaño explícito Preferido y confirme que es el tamaño que quieres que sea.

introduzca la descripción de la imagen aquí

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 la ventana emergente para que aparezca en algún lugar además de un elemento de botón de barra (en un UIButton, por ejemplo), entonces necesita establecer el sourceView y sourceRect. Ver esta respuesta para más detalles.

introduzca la descripción de la imagen aquí

Además lectura

El ejemplo anterior proviene principalmente del primer enlace.

 28
Author: Suragch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:59

En el iPhone generalmente se utiliza una hoja de UIActionSheet para una pila de botones como ese. Se desliza hacia arriba desde la parte inferior, en lugar de aparecer junto al botón, pero ese es el comportamiento estándar en el iPhone.

 19
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-22 16:56:50

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

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

 7
Author: BigSauce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-16 19:30:43

Tendría que instanciar manualmente una UIView usando una imagen de fondo personalizada o un dibujo 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 acción sería más compatible con HIG.

 5
Author: hotpaw2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-22 19:46:06

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

 1
Author: Leszek Szary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-17 12:41:08

La captura de pantalla anterior no es una UIActionSheet. Parece una simple subclase UIView con UIButtons personalizados encima. Así que adelante y cree la subclase de acuerdo a sus necesidades y luego añádala como una subview a su vista cada vez que la necesite.

 0
Author: tux91,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-22 17:57:21

Para obtener una ventana emergente de un elemento de botón de la barra lateral derecha en un controlador de navegación que forma parte de un controlador tableview, lo siguiente funcionó para mí para Swift 4 y Xcode 9.

  1. Siga los pasos en Suragch respuesta anterior (según lo editado por la Comunidad.)
  2. No implemente el Segue como se muestra en la respuesta anterior. Por alguna razón, el segue hace que la ventana emergente vaya a pantalla completa a pesar de establecer el tamaño explícito.
  3. Dale a tu controlador de vista emergente 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 aquí se refiere a una Constante.swift file)
  6. Modificar "como! FilterVC " para usar el título de su controlador de vista emergente.

    /// 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
    }
    
 0
Author: D. Rothschild,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-30 21:57:44