Swift iOS - 如何将 UIPopoverBackgroundView 类中的方法连接到不同类中的 PopoverController?

Posted

技术标签:

【中文标题】Swift iOS - 如何将 UIPopoverBackgroundView 类中的方法连接到不同类中的 PopoverController?【英文标题】:Swift iOS -How to connect method in UIPopoverBackgroundView Class to a PopoverController in a different class? 【发布时间】:2017-06-22 06:14:48 【问题描述】:

我正在使用 PopoverController,我想摆脱背景阴影。苹果说要继承 UIPopoverBackgroundView 并返回 falseoverride class var wantsDefaultContentAppearance: Bool get

https://developer.apple.com/documentation/uikit/uipopoverbackgroundview/1619357-wantsdefaultcontentappearance

我将其子类化并将布尔值设置为false,但阴影仍然显示。如何将此子类连接到我在 LogoutClass 的 Actionsheet 中使用的 PopoverController?

UIPopoverBackgroundView 子类:

class PopoverBackgroundView: UIPopoverBackgroundView 

override class var wantsDefaultContentAppearance: Bool 
        get 
            return false
        
    

注销控制器:

class LogoutController:UIViewController

fileprivate func logOff()

let actionSheet = UIAlertController(title: nil, message: "Logging out?", preferredStyle: .actionSheet)

 let logout = UIAlertAction(title: "Log Out", style: .default)
            (action) in
//bla bla bla


actionSheet.addAction(logout)

if let popoverController = actionSheet.popoverPresentationController
            popoverController.sourceView = view
            guard let window = UIApplication.shared.keyWindow else  return 
            window.backgroundColor = .clear
            popoverController.sourceRect = CGRect(x:window.bounds.midX, y:window.bounds.midY, width:0, height:0)
            popoverController.permittedArrowDirections = []

        
present(actionSheet, animated: true, completion: nil)


【问题讨论】:

【参考方案1】:

您必须像这样设置UIPopoverPresentationController 实例的popoverBackgroundViewClass 属性:

目标 C:

popoverController.popoverBackgroundViewClass = [PopoverBackgroundView class];

斯威夫特

popoverController?.popoverBackgroundViewClass = PopoverBackgroundView.self

根据 Apple 文档:

此属性的默认值为 nil,这会导致呈现控制器使用默认的弹出框外观。将此属性设置为 nil 以外的值会导致演示控制器使用指定的类来绘制弹出框的背景内容。您指定的类必须是 UIPopoverBackgroundView .

【讨论】:

感谢您的帮助。我试过了,但阴影仍然存在,所以我不确定它是否有效。 它仍然无法正常工作,但您的答案是正确的。后台类实现有问题。不过谢谢???

以上是关于Swift iOS - 如何将 UIPopoverBackgroundView 类中的方法连接到不同类中的 PopoverController?的主要内容,如果未能解决你的问题,请参考以下文章

UIPopoverController、Xcode 6、IOS 8 使用 Swift

启动时如何将数据从 uiviewcontroller 发送到 uipopover?

如何将 UIPopover 附加到以编程方式创建的 CGRect

为啥在尝试将 UIPopover 附加到不同类中的 UIButton 时出现此构建错误?

在 ios 中不包含 Tableview 的情况下创建 UIPopOver

UIPopover 中的 UIDatePicker