このポップアップメニューをiPadのポップオーバーのようにiPhoneアプリに実装するにはどうすればよいですか?
編集:これは現時点で最高です:https ://github.com/runway20/PopoverView
このポップアップメニューをiPadのポップオーバーのようにiPhoneアプリに実装するにはどうすればよいですか?
編集:これは現時点で最高です:https ://github.com/runway20/PopoverView
iOS 8以降、UIPopoverPresentationController
iPadだけでなくiPhoneにも使用できるようになりました。
UIBarButtonItem
メインのViewControllerにを追加します。UILabel
。メニュー全体が必要な場合は、テーブルビューまたはボタンのリストを追加するだけです。show
、を選択しますPresent as Popover
。popoverSegue
(またはコードで呼び出した文字列)に設定します。これは、バーボタン項目が含まれているメインビューコントローラのコードです。
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "popoverSegue" {
let popoverViewController = segue.destinationViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
popoverViewController.popoverPresentationController!.delegate = self
}
}
// MARK: - UIPopoverPresentationControllerDelegate method
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
// Force popover style
return UIModalPresentationStyle.None
}
}
ポップオーバーをバーボタンアイテム以外の場所(UIButton
たとえば)に表示するように設定する場合は、とを設定する必要がsourceView
ありsourceRect
ます。詳細については、この回答を参照してください。
上記の例は、主に最初のリンクからのものです。
iPhone UIPopoverControllerの実装を見てください:WEPopover
iPhoneでは、通常、そのようなボタンのスタックにUIActionSheetを使用します。ボタンの横にポップアップするのではなく、下から上にスライドしますが、これはiPhoneの標準的な動作です。
WEPopoverよりも優れているものがあります。50pixelsという会社によって開発され、 FPPopoverと呼ばれています。
FPPopoverはhttps://github.com/50pixels/FPPopoverからダウンロードできます。
カスタム背景画像または透明度のある描画を使用してUIViewを手動でインスタンス化し、UIButton(または他のタイプのカスタムビュー)を上に追加し、そのビューの外側のすべてのタッチを何らかの方法で処理する必要があります。
これは非標準のUIであることに注意してください。アクションシートは、よりHIGに準拠します。
テーブルビューコントローラーの一部であるナビゲーションコントローラーの右側のバーボタンアイテムからポップオーバーを取得するには、Swift4とXcode9で次のように機能しました。
「as!FilterVC」を変更して、ポップオーバービューコントローラのタイトルを使用します。
/// Shows a filter popover view
@IBAction func filterBtnPressed(_ sender: UIBarButtonItem) {
let popover = storyboard?.instantiateViewController(withIdentifier: FILTER_VC) as! FilterVC
popover.modalPresentationStyle = UIModalPresentationStyle.popover
popover.popoverPresentationController?.backgroundColor = UIColor.green
popover.popoverPresentationController?.delegate = self
popover.popoverPresentationController?.backgroundColor = ColorPalette.Blue.Medium
popover.popoverPresentationController?.sourceView = self.view
popover.popoverPresentationController?.sourceRect = CGRect(x: self.view!.bounds.width, y: 0, width: 0, height: 0)
popover.popoverPresentationController?.permittedArrowDirections = .up
self.present(popover, animated: true)
} }
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.none
}
WYPopoverControllerを確認できます:https ://github.com/sammcewan/WYPopoverController
上のスクリーンショットはUIActionSheetではありません。これは、その上にカスタムUIButtonがある単純なUIViewサブクラスのように見えます。したがって、必要に応じてサブクラスを作成し、必要になるたびにサブビューとしてビューに追加してください。