Swiftの任意のアンカーポイントからポップオーバーを表示します
this answer (iPhoneとiPadの両方)で説明されているように、バーボタンアイテムからポップオーバーを表示する方法を知っています。
任意のアンカーポイントにポップオーバーを追加したいと思います。私が見た他のSO回答は、バーボタンアイテムまたはObjective-Cに関するものでした。
これを行う方法を学んだので、以下に自分の答えを追加します。
Swift 3の更新
ストーリーボードで、ポップオーバーにしたいビューコントローラーを追加します。ストーリーボードIDを「popoverId」に設定します。
また、メインビューコントローラーにボタンを追加し、IBActionを次のコードに接続します。
import UIKit
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
@IBAction func buttonTap(sender: UIButton) {
// get a reference to the view controller for the popover
let popController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "popoverId")
// set the presentation style
popController.modalPresentationStyle = UIModalPresentationStyle.popover
// set up the popover presentation controller
popController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.up
popController.popoverPresentationController?.delegate = self
popController.popoverPresentationController?.sourceView = sender // button
popController.popoverPresentationController?.sourceRect = sender.bounds
// present the popover
self.present(popController, animated: true, completion: nil)
}
// UIPopoverPresentationControllerDelegate method
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
// Force popover style
return UIModalPresentationStyle.none
}
}
sourceView
とsourceRect
を設定すると、ポップオーバーを表示する任意のポイントを選択できます。
それでおしまい。これで、ボタンがタップされたときのようになります。
助けてくれてありがとう この記事 。
Swift 3.1のソリューション:
ViewControllerに追加IPopoverPresentationControllerDelegate delegate:
class OriginalViewController: UIViewController, UIPopoverPresentationControllerDelegate
ViewControllerにボタンを追加し、ボタンをタップして次のコードを呼び出します。
let controller = MyPopViewController()
controller.modalPresentationStyle = UIModalPresentationStyle.popover
let popController = controller.popoverPresentationController
popController?.permittedArrowDirections = .any
popController?.delegate = self
popController?.sourceRect = (self.myButton?.bounds)!
popController?.sourceView = self.myButton
self.present(controller, animated: true, completion: nil)