IPadのポップオーバーのように、iPhoneアプリでこのポップアップメニューを実装するにはどうすればよいですか?
[〜#〜] edit [〜#〜]:これは現時点で最高です: https://github.com/runway20/PopoverView
IPhone UIPopoverControllerの実装をご覧ください。 WEPopover
IOS 8以降では、iPadに加えてiPhoneでも UIPopoverPresentationController
を使用できます。
UIBarButtonItem
をメインView Controllerに追加します。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では、通常、そのようなボタンのスタックにUIActionSheetを使用します。ボタンの横にポップアップするのではなく、下からスライドしますが、これはiPhoneの標準的な動作です。
WEPopoverよりも優れているものがあります。 50pixelsという会社によって開発され、FPPopoverと呼ばれています。
FPPopoverはhttps://github.com/50pixels/FPPopoverからダウンロードできます。
カスタムの背景画像または透明な図面を使用してUIViewを手動でインスタンス化し、いくつかのUIButton(または他の種類のカスタムビュー)を上部に追加し、そのビューの外側のすべてのタッチを何らかの方法で処理する必要があります。
は非標準UIです。アクションシートは、よりHIGに準拠しています。
WYPopoverControllerを確認できます: https://github.com/sammcewan/WYPopoverController
Tableview Controllerの一部であるNavigation Controllerの右側のサイドバーボタン項目からポップオーバーを取得するには、Swift 4およびXcode 9。
「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
}
上記のスクリーンショットはUIActionSheetではありません。これは、カスタムUIButtonsを上部に持つ単純なUIViewサブクラスのように見えます。したがって、必要に応じてサブクラスを作成し、必要なたびにサブビューとしてビューに追加してください。