Comment puis-je implémenter ce menu contextuel dans l'application iphone comme un popover dans l'ipad?
EDIT: C'est le meilleur actuellement: https://github.com/runway20/PopoverView
Jetez un coup d'œil à l'implémentation iPhone UIPopoverController: WEPopover
À partir de iOS 8, vous pouvez utiliser UIPopoverPresentationController
pour les iPhones en plus des iPad.
UIBarButtonItem
à votre contrôleur de vue principal. UILabel
. Si vous voulez un menu complet, ajoutez simplement une vue sous forme de tableau ou une liste de boutons.show
, choisissez Present as Popover
.popoverSegue
(ou la chaîne que vous avez appelée dans le code).C'est le code du contrôleur de vue principal qui contient le bouton de barre.
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
}
}
Si vous souhaitez que le popover apparaisse quelque part à côté d'un élément de bouton de barre (sur un UIButton
par exemple), vous devez définir les paramètres sourceView
et sourceRect
. Voir cette réponse pour plus de détails.
L'exemple ci-dessus provient principalement du premier lien.
Sur iPhone, vous utiliseriez généralement une feuille UIActionSheet pour une pile de boutons de ce type. Il glisse du bas vers le haut, plutôt que d'apparaître à côté du bouton, mais c'est le comportement standard sur iPhone.
Il y en a un qui est encore meilleur que WEPopover. Développé par une société appelée 50pixels, il s’appelle FPPopover.
Vous pouvez télécharger FPPopover à l'adresse https://github.com/50pixels/FPPopover
Vous devez instancier manuellement un UIView à l'aide d'une image d'arrière-plan personnalisée ou d'un dessin avec transparence, ajouter des boutons UIB (ou un autre type de vue personnalisée) par-dessus, et gérer d'une manière ou d'une autre toutes les touches extérieures à cette vue.
Notez que c'est une interface utilisateur non standard. Une feuille d'actions serait plus compatible HIG.
Vous pouvez vérifier WYPopoverController: https://github.com/sammcewan/WYPopoverController
Pour obtenir un popover d'un élément de bouton de barre de droite sur un contrôleur de navigation faisant partie d'un contrôleur de table, les éléments suivants ont fonctionné pour moi pour Swift 4 et Xcode 9.
Modifiez "comme! FilterVC" pour utiliser le titre de votre contrôleur de vue 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
}
La capture d'écran ci-dessus n'est pas une feuille UIAction. Cela ressemble à une simple sous-classe UIView avec des boutons UIB personnalisés. Allez-y, créez la sous-classe en fonction de vos besoins, puis ajoutez-la en tant que sous-vue à votre vue chaque fois que vous en avez besoin.