如何在iPhone应用中像iPad中的弹出窗口一样实现此弹出菜单?

alt text


编辑: :这是最好的: https://github.com/runway20/popoverview enter image description here

有帮助吗?

解决方案

看看iPhone UipopoverController实现: Wepopover

其他提示

iOS 8及以后

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

enter image description here

设置

  • 添加一个 UIBarButtonItem 到您的主视图控制器。
  • 将另一个视图控制器添加到故事板中。将其更改为您希望弹出的大小,并添加您想要的内容。在我的示例中,我刚刚添加了 UILabel. 。如果您想要整个菜单,请添加表视图或按钮列表。
  • 将一个从条形按钮项中添加到视图控制器中,您将用作弹出窗口。而不是 show, , 选择 Present as Popover.

enter image description here

  • 在故事板中选择segue,然后将标识符设置为 popoverSegue (或您在代码中调用的任何字符串)。

enter image description here

  • 在弹出视图控制器的属性检查器中,检查 使用首选的显式尺寸 并确认这是您想要的大小。

enter image description here

代码

这是其中包含条按钮项的主视图控制器的代码。

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 例如)然后,您需要设置 sourceViewsourceRect. 。看 这个答案 有关详细信息。

enter image description here

进一步阅读

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

在iPhone上,您通常会使用uiactionsheet进行类似的按钮。它从底部滑动,而不是在按钮旁边弹出,但这是iPhone上的标准行为。

有比Wepopover更好的。由一家名为50pixels的公司开发,称为 fppopover.

您可以在 https://github.com/50pixels/fppopover

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

请注意,这是非标准的UI。 ActionSheet将更加符合HIG。

为了从右侧栏按钮在导航控制器的一部分中获取弹出窗口项目,以下对我有用 Swift 4 和Xcode 9。

  1. 遵循步骤 冲浪 答案上面(社区编辑。)
  2. 请勿如上答案所示实现segue。由于某种原因,尽管设置了明确的尺寸,但SEGUE会导致弹出窗口全屏。
  3. 给您的popover视图控制器一个属性Inspector中的标题
  4. 在弹出窗口将显示的位置视图控制器中添加以下代码。
  5. 修改字符串标识符(这里是引用常数。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
    }
    

您可以检查WypoPoverController: https://github.com/sammcewan/wypopovercontroller

上面的屏幕截图不是UIACTIONSHEET。它看起来像是一个简单的Uiview子类,并在其顶部具有自定义的Uibuttons。因此,请继续根据您的需求创建子类,然后在每次需要时将其添加为视图中的子视图。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top