web-dev-qa-db-ja.com

ポップオーバーはボタンの上を指しません

IPhoneとiPadの両方のレイアウトと互換性のあるアプリケーションがあります。 iPhoneレイアウトの場合、iPad用のアクションシートとポップオーバーを作成しました。問題は、ポップオーバーの矢印がクリックしたボタンを指していないことです。以下は私のコードです...

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

sourceViewsourceRectbuttonbutton.boundsとして設定します。
ビューのレイアウトに応じてallowedArrowDirectionsを選択できます。

actionSheet.popoverPresentationController?.sourceView = button
actionSheet.popoverPresentationController?.sourceRect = button.bounds;
actionSheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Left;

ボタンがBarButtonItemの場合、このコードを使用します。

actionSheet.popoverPresentationController?.barButtonItem = button
actionSheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Up;
93
rakeshbs

私にとっては、送信者を使用してUIViewとしてキャストしました。

alertController.popoverPresentationController?.sourceView = sender as! UIView
alertController.popoverPresentationController?.sourceRect = sender.bounds

alertController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Up
2
Javier Gomez

Swift

私のボタンがUIBarButtonItemの場合、これはうまくいきました:

if UIDevice.current.userInterfaceIdiom == .pad {

    if controller.responds(to: "popoverPresentationController") {
        controller.popoverPresentationController?.barButtonItem = YourUIBarButtonName
    }

}

以下のコードスニペット全体:

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