36

このポップアップメニューをiPadのポップオーバーのようにiPhoneアプリに実装するにはどうすればよいですか?

代替テキスト


編集:これは現時点で最高です:https ://github.com/runway20/PopoverView ここに画像の説明を入力してください

4

8 に答える 8

33

iOS8以降

iOS 8以降、UIPopoverPresentationControlleriPadだけでなくiPhoneにも使用できるようになりました。

ここに画像の説明を入力してください

設定

  • UIBarButtonItemメインのViewControllerにを追加します。
  • 別のViewControllerをストーリーボードに追加します。ポップオーバーにしたいサイズに変更し、必要なコンテンツを追加します。私の例では、を追加しましたUILabel。メニュー全体が必要な場合は、テーブルビューまたはボタンのリストを追加するだけです。
  • バーボタンアイテムから、ポップオーバーとして使用するViewControllerにセグエを追加します。ではなく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ます。詳細については、この回答を参照してください。

ここに画像の説明を入力してください

参考文献

上記の例は、主に最初のリンクからのものです。

于 2015-08-30T11:10:15.163 に答える
22

iPhone UIPopoverControllerの実装を見てください:WEPopover

于 2011-02-24T09:25:43.190 に答える
19

iPhoneでは、通常、そのようなボタンのスタックにUIActionSheetを使用します。ボタンの横にポップアップするのではなく、下から上にスライドしますが、これはiPhoneの標準的な動作です。

于 2011-01-22T16:56:50.907 に答える
7

WEPopoverよりも優れているものがあります。50pixelsという会社によって開発され、 FPPopoverと呼ばれています。

FPPopoverはhttps://github.com/50pixels/FPPopoverからダウンロードできます。

于 2012-07-16T19:30:43.853 に答える
5

カスタム背景画像または透明度のある描画を使用してUIViewを手動でインスタンス化し、UIButton(または他のタイプのカスタムビュー)を上に追加し、そのビューの外側のすべてのタッチを何らかの方法で処理する必要があります。

これは非標準のUIであることに注意してください。アクションシートは、よりHIGに準拠します。

于 2011-01-22T19:46:06.220 に答える
2

テーブルビューコントローラーの一部であるナビゲーションコントローラーの右側のバーボタンアイテムからポップオーバーを取得するには、Swift4とXcode9で次のように機能しまし

  1. 上記のSuragch回答の手順に従ってください(コミュニティによって編集されたとおり)。
  2. 上記の回答に示されているように、Segueを実装しないでください。何らかの理由で、明示的なサイズを設定しているにもかかわらず、セグエによってポップオーバーが全画面表示になります。
  3. 属性インスペクターでポップオーバービューコントローラーにタイトルを付けます
  4. ポップアップが表示されるTableViewコントローラーに次のコードを追加します。
  5. 文字列識別子を変更します(ここにあるのはConstant.swiftファイルを参照しています)
  6. 「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
    }
    
于 2017-09-30T21:57:44.223 に答える
1

WYPopoverControllerを確認できます:https ://github.com/sammcewan/WYPopoverController

于 2014-11-17T12:41:08.413 に答える
0

上のスクリーンショットはUIActionSheetではありません。これは、その上にカスタムUIButtonがある単純なUIViewサブクラスのように見えます。したがって、必要に応じてサブクラスを作成し、必要になるたびにサブビューとしてビューに追加してください。

于 2011-01-22T17:57:21.887 に答える