Swift:如何在iOS中创建弹出菜单

Num*_*bot 5 uipopovercontroller ios uipopover swift

我正在自定义UIView画布上进行一些绘制,而不是在视图底部设置一组按钮以允许用户选择形状,而是希望用户长按手势,然后出现一个弹出式菜单,它们可以选择不同的形状。尽管我认为在iOS中有类似的东西,但我在xCode中看不到任何类似的东西。我不希望在电量不足和通知不足时显示警报弹出窗口。

我已经研究过使用UIPopoverController,但是对于我已经阅读过的其他一些Stack Overflow问题以及Apple提供的文档感到有些困惑。

Kor*_*pel 1

在将该按钮与 viewController 和弹出框连接起来作为转场后,您需要做好准备。以下是为弹出窗口做好准备的代码。

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    if let identifier = segue.identifier
    {
        switch identifier
        {
            case History.SegueIdentifier:

            if let tvc = segue.destinationViewController as? TextViewController
            {
                if let ppc = tvc.popoverPresentationController
                {
                    ppc.delegate = self
                }
                tvc.text = "\(diagnosticHistory)"
            }

            default: break
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请记住,如果您有 iPhone,弹出窗口将全屏显示,因此您可以使用它来修复该问题,例如使用某些特定元素的文本。

这会将弹出窗口修复为与文本中元素的大小完全相同的大小。

@IBOutlet weak var textView: UITextView!
{
    didSet
    {
        textView.text = text
    }
}

var text : String = ""
{
    didSet
    {
        textView?.text = text
    }
}

override var preferredContentSize : CGSize
{
    get
    {
        if textView != nil && presentingViewController != nil
        {
            return textView.sizeThatFits(presentingViewController!.view.bounds.size)
        }
        else
        {
            return super.preferredContentSize
        }
    }

    set {super.preferredContentSize = newValue}

    }
}
Run Code Online (Sandbox Code Playgroud)

我在不同的视图控制器中有这两个,但我想它会起作用。您还需要实施UIPopoverPresentationControllerDelegate

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
    return UIModalPresentationStyle.None
}
Run Code Online (Sandbox Code Playgroud)

到你的第一个viewController。