像iPad popover的iPhone弹出菜单?

elp*_*elp 34 iphone objective-c popover ipad uipopovercontroller

如何在iPhone应用程序中实现这个弹出菜单,就像在ipad中使用popover一样?

替代文字


编辑:这是目前最好的:https://github.com/runway20/PopoverView 在此输入图像描述

Sur*_*gch 30

iOS 8及更高版本

从iOS 8开始,UIPopoverPresentationController除了iPad之外,您还可以使用iPhone.

在此输入图像描述

建立

  • 添加UIBarButtonItem到主View Controller.
  • 将另一个视图控制器添加到故事板.将其更改为您希望弹出窗口的大小,并添加您希望它具有的任何内容.对于我的例子,我刚刚添加了一个UILabel.如果您想要一个完整的菜单,那么只需添加一个表格视图或按钮列表.
  • 从条形按钮项添加一个segue到视图控制器,您将用作弹出框.而不是show选择Present as Popover.

在此输入图像描述

  • 在故事板中选择segue并将标识符设置为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
    }
}
Run Code Online (Sandbox Code Playgroud)

在任意锚点处弹出

如果要将弹出窗口设置为显示在条形按钮项目之外的某个位置(UIButton例如),则需要设置sourceViewsourceRect.有关详情,请参阅此答案.

在此输入图像描述

进一步阅读

以上示例主要来自第一个链接.

  • 这应该是现在接受的答案 (3认同)

小智 22

看看iPhone UIPopoverController的实现:WEPopover


Bri*_*ian 19

在iPhone上,您通常会使用UIActionSheet来存储一堆按钮.它从底部向上滑动,而不是在按钮旁边弹出,但这是iPhone上的标准行为.


Big*_*uce 7

有一个甚至比WEPopover更好.它由一家名为50pixels的公司开发,名为FPPopover.

您可以在https://github.com/50pixels/FPPopover下载FPPopover

  • 还记录了很多内存问题 (2认同)

hot*_*aw2 5

您必须使用自定义背景图像或透明图形手动实例化UIView,在顶部添加一些UIButtons(或其他类型的自定义视图),并以某种方式处理该视图外的所有触摸.

请注意,这是非标准UI.动作表将更符合HIG.