私はビュー内にUIButtonを持っています。 UIButtonはiPadでUIAlertControllerとdisplayShareSheetがクラッシュする
ように配置されている私はUIButtonは、これは
のように見えるのアラートを生成
@IBAction func shareButtonClicked(_ sender: AnyObject) {
Flurry.logEvent("Share button tapped");
let textToShare = quotetext.text
// 1.
// Create and initialize a UIAlertController instance.
//
let alertController = UIAlertController(title: nil,
message: nil,
preferredStyle: .actionSheet)
// 2.
// Initialize the actions to show along with the alert.
//
let copyAction = UIAlertAction(title:"Copy Quote to clipboard",
style: .default) { (action) -> Void in
let pasteboard: UIPasteboard = UIPasteboard.general
pasteboard.string = self.quotetext.text;
}
let defaultAction = UIAlertAction(title:"Share Quote",
style: .default) { (action) -> Void in
// We have contents so display the share sheet
self.displayShareSheet(shareContent: textToShare)
}
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (action) in
// ...
}
// 3.
// Tell the alertController about the actions we want it
// to present.
//
alertController.addAction(copyAction)
alertController.addAction(defaultAction)
alertController.addAction(cancelAction)
// 4.
// Present the alert controller and associated actions.
//
self.present(alertController, animated: true, completion: nil)
}
クリックされたときにトリガーされる@IBActionを持っています[共有引用]を選択すると、アラートによってshareSheetが表示されます。
この@IBActionはiPhoneで動作しますが、iPadではクラッシュしています。エラーメッセージが
'NSGenericException'、理由である:「あなたのアプリケーションは、スタイル UIAlertControllerStyleActionSheetの UIAlertController()を提示しました。このスタイルの UIAlertControllerのmodalPresentationStyleはUIModalPresentationPopoverです。 は、このポップオーバーの位置情報を、コントローラのpopoverPresentationController アラートによって提供する必要があります。 sourceViewとsourceRectまたはbarButtonItemのいずれかを指定する必要があります。 アラートコントローラを表示するときにこの情報が である場合は、 UIPopoverPresentationControllerDelegateメソッド -prepareForPopoverPresentationに入力してください。
私は、この修正プログラムは動作しません
//iPad
alertController.popoverPresentationController?.sourceView = viewBottom
alertController.popoverPresentationController?.sourceRect = viewBottom.bounds
alertController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.down;
ような何かを試みることによってこの問題を解決しようとしてきました。アラートは 'viewBottom'上に正しく配置されず、 'defaultAction'ボタンをクリックすると、上記のエラーメッセージで再びクラッシュします。
私はこの問題を解決するためにここに迷っています。誰もこれについていくつかのアドバイスを与えることができますか?私はUIPopoverPresentationControllerDelegate方法 -prepareForPopoverPresentation
を使用するためのさまざまな方法を試してみました。」
私のコードでは、成功しませんでした。これについて何かアドバイスをいただきました。ありがとう。
私のボタンがUIButtonであり、UIBarButtonItemではないことを考慮しても問題は解決しますか?私はそれのためのコンセントを既に持っています - @IBOutlet弱いvarのuploadBtn:UIButton! – user619804
私はそれが 'UIBarButtonItem'だと仮定しました。 'UIButton'の私の更新を見てください。 – rmaddy
alertControllerにはうってつけ!正しく配置されています。 「ディスプレイの共有シート」はまだクラッシュしています。同じように共有シートをどのように設定できるのか分かりません。 – user619804