menu pop-up do iPhone como popover do iPad?

Como posso implementar este menu pop-up no aplicativo do iPhone como um popover no ipad?

texto alternativo


EDIT : Este é o melhor no momento: https://github.com/runway20/PopoverView insira a descrição da imagem aqui

Dê uma olhada na implementação do iPhone UIPopoverController: WEPopover

iOS 8 e posterior

A partir do iOS 8, você pode usar o UIPopoverPresentationController para iPhones, além de iPads.

insira a descrição da imagem aqui

Configuração

  • Adicione um UIBarButtonItem ao seu View Controller principal.
  • Adicione outro controlador de vista ao storyboard. Altere-o para o tamanho que você deseja que o popover seja e adicione qualquer conteúdo que você queira que ele tenha. Para o meu exemplo, acabei de adicionar um UILabel . Se você quiser um menu completo, basta adicionar uma visualização de tabela ou uma lista de botões.
  • Adicione um segue do item do botão de barra para o controlador de exibição que você usará como o popover. Em vez de show , escolha Present as Popover .

insira a descrição da imagem aqui

  • Selecione o segue no storyboard e configure o identificador para popoverSegue (ou qualquer string que você tenha chamado no código).

insira a descrição da imagem aqui

  • No Inspetor de atributos do controlador de visualização popover, marque Usar tamanho de explícito preferido e confirme se é o tamanho desejado.

insira a descrição da imagem aqui

Código

Este é o código para o controlador de visualização principal que possui o item de botão da barra.

 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 em um ponto de ancoragem arbitrário

Se você quiser definir o popover para aparecer em algum lugar além de um item de botão de barra (em um UIButton por exemplo), então você precisa definir o sourceView e o sourceRect . Veja esta resposta para detalhes.

insira a descrição da imagem aqui

Leitura adicional

O exemplo acima vem principalmente do primeiro link.

  • Popovers estilo iPad no iPhone com Swift
  • Apresentações Popover do iOS 8
  • UIPopoverPresentationController no iPhone do iOS 8
  • Visão geral das opções de pop-up no iOS

No iPhone você geralmente usaria um UIActionSheet para uma pilha de botões como esse. Ele desliza para cima, em vez de aparecer ao lado do botão, mas esse é o comportamento padrão no iPhone.

Existe um que é ainda melhor que o WEPopover. Desenvolvido por uma empresa chamada 50pixels, é chamado FPPopover .

Você pode fazer o download do FPPopover em https://github.com/50pixels/FPPopover

Você teria que instanciar manualmente um UIView usando uma imagem de plano de fundo personalizada ou desenhar com transparência, adicionar alguns UIButtons (ou outro tipo de exibição personalizada) na parte superior e também, de alguma forma, manipular todos os toques fora dessa exibição.

Observe que é uma interface não padrão. Uma planilha seria mais compatível com HIG.

Você pode verificar WYPopoverController: https://github.com/sammcewan/WYPopoverController

A captura de canvas acima não é uma UIActionSheet. Parece uma subclass UIView simples com UIButtons personalizados em cima dela. Então, vá em frente e crie a subclass de acordo com suas necessidades e, em seguida, adicione-a como uma subvisualização à sua visualização toda vez que precisar dela.

Para obter um popover de um item de botão da barra do lado direito em um controlador de navegação que faz parte de um controlador tableview, o seguinte funcionou para mim para o Swift 4 e o Xcode 9.

  1. Siga os passos da resposta Suragch acima (conforme editado pela Comunidade).
  2. Não implemente a Segue como mostrado na resposta acima. Por alguma razão, o segue faz com que o popover fique em canvas cheia, apesar de definir o tamanho explícito.
  3. Dê ao seu controlador popover view um título no Attributes Inspector
  4. Adicione o seguinte código no controlador TableView onde o pop-up será exibido.
  5. Modifique o identificador de string (aquele aqui está referenciando um arquivo Constant.swift)
  6. Modifique “as! FilterVC” para usar o título do seu controlador de visualização 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 }