web-dev-qa-db-fra.com

Pop over ne pointe pas sur le bouton

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)
25
Srujan Simha

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;
94
rakeshbs

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
2
Javier Gomez

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)
}
1
A.J. Hernandez