J'ai une application compatible avec les dispositions iPhone et iPad. Pour la mise en page iPhone, j'ai créé Action Sheet et Pop over pour iPad. Le problème est que la flèche pop-over ne pointe pas sur le bouton sur lequel j'ai cliqué. Voici mon code ....
let actionSheet = UIAlertController(title: "Choose an option",
message: "Message",
preferredStyle: .ActionSheet)
...
if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad
{
// for iPad
actionSheet.popoverPresentationController?.sourceView = self.view
actionSheet.popoverPresentationController?.sourceRect = self.view.bounds;
actionSheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.allZeros;
}
self.presentViewController(actionSheet, animated: true, completion: nil)
Définissez sourceView
et sourceRect
comme button
et button.bounds
.
Vous pouvez choisir les ArrowDirections autorisés en fonction de la disposition de votre vue.
actionSheet.popoverPresentationController?.sourceView = button
actionSheet.popoverPresentationController?.sourceRect = button.bounds;
actionSheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Left;
Si le bouton est un BarButtonItem, utilisez ce code.
actionSheet.popoverPresentationController?.barButtonItem = button
actionSheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Up;
Pour moi, j'ai utilisé l'expéditeur et le casting comme UIView.
alertController.popoverPresentationController?.sourceView = sender as! UIView
alertController.popoverPresentationController?.sourceRect = sender.bounds
alertController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Up
Swift
Cela a fonctionné pour moi lorsque mon bouton était un UIBarButtonItem:
if UIDevice.current.userInterfaceIdiom == .pad {
if controller.responds(to: "popoverPresentationController") {
controller.popoverPresentationController?.barButtonItem = YourUIBarButtonName
}
}
Extrait de code complet ci-dessous:
func presentActivitySheet() {
let controller = UIActivityViewController(activityItems: [document.fileURL], applicationActivities: nil)
if UIDevice.current.userInterfaceIdiom == .pad {
if controller.responds(to: "popoverPresentationController") {
controller.popoverPresentationController?.barButtonItem = YourUIBarButtonName
}
}
present(controller, animated: true, completion: nil)
}