obsidian/笔记文件/2.笔记/popoverPresentationController.md
2025-03-26 00:02:56 +08:00

2.3 KiB
Raw Permalink Blame History

#ios

popoverPresentationController是 iOS UIKit 框架中的一个属性,用于显示弹出窗口。弹出窗口是一种模态视图控制器,可在小浮动窗口中显示内容,通常锚定在源视图或栏按钮项上,在 iPad 上很常见,但在某些配置下也可用于 iPhone。

主要属性及用途:

  • UIPopoverPresentation控制器
    • 当您以模态方式呈现视图控制器并将呈现样式指定为时.popover,视图控制器将获得关联的popoverPresentationController
    • 该控制器负责配置弹出窗口的外观和行为。

常见配置:

  1. 源视图/栏按钮项目

    • 您必须指定sourceViewsourceRect(以使弹出窗口锚定到特定视图和矩形),或者barButtonItem如果要将弹出窗口附加到栏按钮,则必须指定。

    例子:

let popoverContent = UIViewController()
popoverContent.modalPresentationStyle = .popover
if let popover = popoverContent.popoverPresentationController {
    popover.sourceView = someButton
    popover.sourceRect = someButton.bounds
}
present(popoverContent, animated: true, completion: nil)

允许的箭头方向

  • 您可以设置弹出窗口可以指向的方向。可以是.up.down.left.right.any
popover.permittedArrowDirections = .any

代表

  • 您可以设置委托来自定义行为,例如在点击其边界外时关闭弹出窗口。
  • 委托人实现UIPopoverPresentationControllerDelegate协议来控制呈现行为。
popover.delegate = self
  1. iPhone 上的演示

    • 弹出窗口通常用于 iPad但在 iPhone 上,除非您进行自定义,否则演示样式可能会默认自动恢复为全屏。

委托示例:

要处理点击外部以关闭弹出窗口:

extension YourViewController: UIPopoverPresentationControllerDelegate {
    func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {
        return true // Allow dismissal on tap outside
    }
}

popoverPresentationController具有高度可定制性,与其他模态视图相比,它是一种以更微妙、更特定于上下文的方式呈现内容的灵活工具。