iPhone的popup式菜单像iPad popover?

我怎样才能在iPhone应用程序中实现这个popup菜单,就像在iPad中的popup窗口?

替代文字


编辑 :这是最好的时刻: https : //github.com/runway20/PopoverView 在这里输入图像说明

看看iPhone的UIPopoverController实现: WEPopover

iOS 8及更高版本

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

在这里输入图像说明

build立

  • 添加一个UIBarButtonItem到你的主视图控制器。
  • 将另一个视图控制器添加到故事板。 将其更改为您希望popup窗口的大小,然后添加您想要的内容。 对于我的例子,我只是添加了一个UILabel 。 如果你想要一个完整的菜单,那么只需添加一个表格视图或button列表。
  • 从barbutton项目添加segue到视图控制器,您将用作popover。 Present as Popover ,而不是show

在这里输入图像说明

  • 在storyboard中selectsegue并将标识符设置为popoverSegue (或者在代码中调用它的任何string)。

在这里输入图像说明

  • 在popup窗口视图控制器的“属性”检查器中,选中“ 使用首选显式大小”并确认它是您想要的大小。

在这里输入图像说明

这是主视图控制器中的条形button项的代码。

 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 } } 

在任意锚点的Popover

如果你想设置popup窗口出现在除了一个栏button项目之外(例如在UIButton上),那么你需要设置sourceViewsourceRect 。 看到这个答案的细节。

在这里输入图像说明

进一步阅读

上面的例子主要来自第一个链接。

  • 用Swift在iPhone上的iPad风格popup
  • iOS 8 Popover演示文稿
  • iOS 8 iPhone上的UIPopoverPresentationController
  • iOS中popup选项的一般概述

在iPhone上,你通常会使用一个UIActionSheet作为一堆button。 它从底部向上滑动,而不是popupbutton旁边,但这是iPhone上的标准行为。

有一个比WEPopover更好。 由一个叫做50pixels的公司开发,它被称为FPPopover

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

你将不得不手动实例化一个UIView使用自定义背景图像或绘制透明度,在顶部添加一些UIButtons(或其他types的自定义视图),并以某种方式处理该视图之外的所有触摸。

请注意,这是非标准的用户界面。 一个行动表将更符合HIG。

你可以检查WYPopoverController: https : //github.com/sammcewan/WYPopoverController

上面的屏幕截图不是UIActionSheet。 它看起来像一个简单的UIView子类,在它上面有自定义的UIButtons。 因此,请根据需要创build子类,然后在每次需要时将其作为子视图添加到视图中。

要从属于tableview控制器的导航控制器上的右侧栏button项获得popup窗口,以下工作适用于Swift 4和Xcode 9。

  1. 按照上面的Suragch答案中的步骤(由社区编辑)。
  2. 如上面的答案所示,不要执行Segue。 出于某种原因,segue会导致popup窗口全屏显示,尽pipe设置了显式大小。
  3. 在属性检查器中给你的popup视图控制器一个标题
  4. 在popup窗口中的TableView控制器中添加以下代码。
  5. 修改string标识符(这里引用一个Constant.swift文件)
  6. 修改“as!FilterVC”来使用你的popover视图控制器的标题。

     /// 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 }