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

62 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ios
`popoverPresentationController`是 iOS UIKit 框架中的一个属性,用于显示**弹出窗口**。弹出窗口是一种模态视图控制器,可在小浮动窗口中显示内容,通常锚定在源视图或栏按钮项上,在 iPad 上很常见,但在某些配置下也可用于 iPhone。
### 主要属性及用途:
- **UIPopoverPresentation控制器**
- 当您以模态方式呈现视图控制器并将呈现样式指定为时`.popover`,视图控制器将获得关联的`popoverPresentationController`
- 该控制器负责配置弹出窗口的外观和行为。
### 常见配置:
1. **源视图/栏按钮项目**
- 您必须指定`sourceView``sourceRect`(以使弹出窗口锚定到特定视图和矩形),或者`barButtonItem`如果要将弹出窗口附加到栏按钮,则必须指定。
例子:
``` objc
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`。
``` objc
popover.permittedArrowDirections = .any
```
**代表**
- 您可以设置委托来自定义行为,例如在点击其边界外时关闭弹出窗口。
- 委托人实现`UIPopoverPresentationControllerDelegate`协议来控制呈现行为。
``` objc
popover.delegate = self
```
1. **iPhone 上的演示**
- 弹出窗口通常用于 iPad但在 iPhone 上,除非您进行自定义,否则演示样式可能会默认自动恢复为全屏。
### 委托示例:
要处理点击外部以关闭弹出窗口:
``` objc
extension YourViewController: UIPopoverPresentationControllerDelegate {
func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {
return true // Allow dismissal on tap outside
}
}
```
`popoverPresentationController`具有高度可定制性,与其他模态视图相比,它是一种以更微妙、更特定于上下文的方式呈现内容的灵活工具。