Anchor 和 Passthrough 在 popover segue 中有何用途

ios

1个回答

写回答

Joanna C

2025-07-09 16:55

+ 关注

IOS
IOS

在 popover segue 中,Anchor 和 Passthrough 是两个非常有用的属性,它们可以帮助我们实现更加灵活和自定义的弹出视图。Popover segue 是 IOS 开发中经常使用的一种方式,用于在 iPad 上显示一个弹出视图。Anchor 属性定义了弹出视图的锚点位置,而 Passthrough 属性则决定了是否允许用户点击弹出视图之外的区域来关闭弹出视图。

Anchor 属性的作用

Anchor 属性用于定义弹出视图的锚点位置,即弹出视图的起始位置。在 iPad 上,弹出视图通常是从一个按钮或者一个视图中弹出的,Anchor 属性可以帮助我们指定弹出视图的起始位置。通过设置 Anchor 属性,我们可以让弹出视图相对于按钮或者视图的某个位置进行弹出,从而实现更加精确的弹出效果。

例如,假设我们有一个按钮,点击该按钮后需要显示一个弹出视图。我们可以在 storyboard 中创建一个 popover segue,并将其连接到按钮上。然后,在 popover segue 的属性面板中,我们可以设置 Anchor 属性为按钮,这样弹出视图就会从按钮的位置开始弹出。

Passthrough 属性的作用

Passthrough 属性用于决定是否允许用户点击弹出视图之外的区域来关闭弹出视图。当 Passthrough 属性设置为 true 时,用户可以通过点击弹出视图之外的区域来关闭弹出视图;当 Passthrough 属性设置为 false 时,用户无法通过点击弹出视图之外的区域来关闭弹出视图。

通常情况下,当我们想要用户点击弹出视图之外的区域时关闭弹出视图时,我们会将 Passthrough 属性设置为 true。而当我们希望用户无法关闭弹出视图时,我们会将 Passthrough 属性设置为 false。

示例代码

下面是一个示例代码,演示了如何在 popover segue 中使用 Anchor 和 Passthrough。

首先,我们需要创建两个视图控制器,一个用于显示按钮,另一个用于显示弹出视图。然后,在按钮视图控制器中,我们需要创建一个按钮,并在按钮的点击事件中执行弹出视图的显示操作。

Swift

class ButtonViewController: UIViewController {

@IBAction func showPopover(_ sender: UIButton) {

performSegue(withIdentifier: "showPopover", sender: sender)

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

if segue.identifier == "showPopover" {

let popoverVC = segue.destination as! PopoverViewController

popoverVC.modalPresentationStyle = .popover

popoverVC.popoverPresentationController?.sourceView = sender as? UIView

popoverVC.popoverPresentationController?.sourceRect = (sender as! UIView).bounds

popoverVC.popoverPresentationController?.permittedArrowDirections = .up

popoverVC.popoverPresentationController?.delegate = self

}

}

}

extension ButtonViewController: UIPopoverPresentationControllerDelegate {

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {

return .none

}

func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {

return true

}

}

在上述代码中,我们首先在按钮视图控制器中创建了一个按钮,并在按钮的点击事件中执行了 performSegue 方法来显示弹出视图。在 prepare(for:sender:) 方法中,我们设置了弹出视图的相关属性,包括 sourceView、sourceRect、permittedArrowDirections 和 delegate。

在弹出视图控制器中,我们需要实现 UIPopoverPresentationControllerDelegate 协议的一些方法,其中 adaptivePresentationStyle(for:) 方法返回 .none,表示不自动调整弹出视图的样式,而 popoverPresentationControllerShouldDismissPopover(_:) 方法返回 true,表示允许用户点击弹出视图之外的区域来关闭弹出视图。

通过以上代码,我们就可以在 popover segue 中使用 Anchor 和 Passthrough 属性来实现自定义的弹出视图效果了。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号