2015-01-07 13 views
18

iPhoneとiPadの両方のレイアウトに対応したアプリケーションがあります。 iPhoneのレイアウトでは、私はAction SheetとPop over for 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) 

答えて

69

buttonbutton.boundsなどsourceViewsourceRectを設定してください....です。
ビューのレイアウトに応じて、指定できるArrowDirectionsを選択できます。

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

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

actionSheet.popoverPresentationController?.barButtonItem = button 
actionSheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Up; 
+0

正常に動作しませんでしたどちらか。ボタンは実際には 'UIBarButtonItem'です。私は '@IBAction func userOptions(button:UIBarButtonItem)'関数を変更し、エラーを投げた: '[UIBarButtonItem bounds]:送信された認識できないセレクタ' –

+0

私の修正された答えをチェック@SrujanSimha – rakeshbs

+0

パーフェクト!感謝の男:) –

2

私の場合、送信者を使用してUIViewとしてキャスティングしました。

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

alertController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Up 
0

SWIFT 3

私のボタンが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) 
} 
関連する問題