Crear un popover desde un UIButton en Swift

Deseo crear un pequeño popover de 50x50px desde un UIButton . He visto methods usando segue's adaptativos, pero tengo el turno de mis classs de tamaño, ¡lo que significa que no puedo usar estas funciones!

¿De qué otra manera puedo crear este popover? ¿Puedo crearlo con código dentro de mi button IBACtion ? ¿O todavía hay una manera de que pueda hacer esto con storyboards?

Puede hacer una de las siguientes dos opciones:

  • Cree una acción para el UIButton en su UIViewController y dentro de él presente el ViewController que desea como un Popover y su UIViewController tiene que implementar el protocolo UIPopoverPresentationControllerDelegate , eche un vistazo en el siguiente código:

     @IBAction func showPopover(sender: AnyObject) { var popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("StoryboardIdentifier") as! UIViewController popoverContent.modalPresentationStyle = .Popover var popover = popoverContent.popoverPresentationController if let popover = popoverContent.popoverPresentationController { let viewForSource = sender as! UIView popover.sourceView = viewForSource // the position of the popover where it's showed popover.sourceRect = viewForSource.bounds // the size you want to display popoverContent.prefernetworkingContentSize = CGSizeMake(200,500) popover.delegate = self } self.presentViewController(popoverContent, animated: true, completion: nil) } func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { return .None } 

    De acuerdo con el libro de @matt Programming iOS 8 :

    Un controller de presentación de popover, en iOS 8, es un controller de presentación ( UIPresentationController ), y los controlleres de presentación son adaptativos. Esto significa que, de forma pnetworkingeterminada, en un entorno horizontalmente compacto (es decir, en un iPhone), el estilo de presentación modal .Popover se tratará como .FullScreen . Lo que aparece como un popover en el iPad aparecerá como una vista presentada a pantalla completa en el iPhone, reemplazando completamente la interfaz.

    Para evitar este comportamiento en el iPhone, debe implementar el método de delegado adaptivePresentationStyleForPresentationController dentro de su UIViewController para mostrar el Popover correctamente.

  • La otra forma, en mi opinión, es más fácil de hacer, y está utilizando Interface Builder, simplemente organice desde el UIButton para crear una segue al ViewController que desee y luego select la Popover segue.

Espero que esto te ayude.

Aquí puede presentar un popover onclick en el button.

 func addCategory( _ sender : UIButton) { var popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("NewCategory") as UIViewController var nav = UINavigationController(rootViewController: popoverContent) nav.modalPresentationStyle = UIModalPresentationStyle.Popover var popover = nav.popoverPresentationController popoverContent.prefernetworkingContentSize = CGSizeMake(50,50) popover.delegate = self popover.sourceView = sender popover.sourceRect = sender.bounds self.presentViewController(nav, animated: true, completion: nil) }