62 lines
2.3 KiB
Markdown
62 lines
2.3 KiB
Markdown
![]() |
#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`具有高度可定制性,与其他模态视图相比,它是一种以更微妙、更特定于上下文的方式呈现内容的灵活工具。
|