gpt4 book ai didi

ios - iOS 8 上 Swift 1.2 中的全局弹出框功能

转载 作者:行者123 更新时间:2023-11-28 13:09:50 25 4
gpt4 key购买 nike

我在整个应用程序中都使用了这个函数,创建一个全局函数会很好:

class CustomReportVC: UIViewController, UIAdaptivePresentationControllerDelegate, UIPopoverPresentationControllerDelegate {

func showPicker(pickerValues:[String], field:UITextField) -> AnyPickerVC{
//Set up modal
let storyboard = UIStoryboard(name: "Popovers", bundle: nil)
let modal = storyboard.instantiateViewControllerWithIdentifier("AnyPickerModal") as! AnyPickerVC
modal.modalPresentationStyle = UIModalPresentationStyle.Popover
let pc = modal.popoverPresentationController
pc?.permittedArrowDirections = .Down
pc?.sourceView = field
pc?.sourceRect = field.bounds
modal.preferredContentSize = CGSizeMake(300,180)
pc?.delegate = self

//Pass in data
modal.data = pickerValues

//Set the value from within the picker controller
modal.passDataToParent = { (value) in
field.text = value
}

return modal
}

//Required for the popover
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return .None
}

}

我遇到的问题是 pc?.delegate = self。由于 CustomReportVC 符合 UIPopoverPresentationControllerDelegate,因此可以正常工作。

但是一旦我尝试将其创建为符合此协议(protocol)的类之外的全局函数,我就会收到错误消息:

func globalShowPicker(pickerValues:[String], field:UITextField, controller:UIViewController) -> AnyPickerVC{
//...
pc?.delegate = controller //<-- ( ! ) Type UIViewController does not conform to UIPopoverPresentationControllerDelegate
}

无论我将 controller 设为 UIViewController 还是 AnyObject,它都不符合要求。有没有办法以某种方式将协议(protocol)一致性传递给全局函数?

知道如何实现吗?谢谢。 :)

最佳答案

使您的全局函数通用以指定它仅适用于某些 类型的 UIViewController。在此示例中,T 可以采用任何 UIViewController 类型的值,该类型也符合列出的其他协议(protocol)。

func globalShowPicker< T: UIViewController where
T: UIPopoverPresentationControllerDelegate,
T: UIAdaptivePresentationControllerDelegate >
(pickerValues:[String], field:UITextField, controller: T) -> AnyPickerVC
{
//...
pc?.delegate = controller

return blah
}

确实有点长,而且我还没有想出缩进所有约束的最佳方法。但它有效。

关于ios - iOS 8 上 Swift 1.2 中的全局弹出框功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31756062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com