Como posso implementar este menu pop-up no aplicativo do iPhone como um popover no ipad?
EDIT : Este é o melhor no momento: https://github.com/runway20/PopoverView
Dê uma olhada na implementação do iPhone UIPopoverController: WEPopover
A partir do iOS 8, você pode usar o UIPopoverPresentationController
para iPhones, além de iPads.
UIBarButtonItem
ao seu View Controller principal. UILabel
. Se você quiser um menu completo, basta adicionar uma visualização de tabela ou uma lista de botões. show
, escolha Present as Popover
.
popoverSegue
(ou qualquer string que você tenha chamado no 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 } }
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.
O exemplo acima vem principalmente do primeiro link.
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.
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 }