我有一个名为LogbookFormTVC
的UITableViewController
子类,它符合UIPopoverPresentationControllerDelegate
。在这一类我有一个创建和显示酥料饼的功能:Swift/iOS控制器在通过函数时不保留委托
// --------------------
// LogbookFormTVC.swift
// --------------------
class LogbookFormTVC: UITableViewController, UIAdaptivePresentationControllerDelegate, UIPopoverPresentationControllerDelegate {
@IBAction func tapShowPopover(sender: AnyObject) {
//Tap to show the popover
self.presentViewController(showAircraftPicker(), animated: true, completion: nil)
}
//Build the popover
func showAircraftPicker() -> UIViewController{
//Set up modal
let storyboard = UIStoryboard(name: "Popovers", bundle: nil)
var aircraftModal = storyboard.instantiateViewControllerWithIdentifier("AircraftModal") as! AircraftPickerVC
let pc = aircraftModal.popoverPresentationController
pc?.sourceView = self.view
pc?.delegate = self
return aircraftModal
}
}
我想搬到这个showAircraftPicker()
功能,使之成为我的应用程序可用任何地方,所以我将它移动到另一个这样的文件:
// --------------------
// SomeWhereElse.swift
// --------------------
//This works
func showAircraftPicker(controller: LogbookFormTVC) -> UIViewController{
//Set up modal
let storyboard = UIStoryboard(name: "Popovers", bundle: nil)
var aircraftModal = storyboard.instantiateViewControllerWithIdentifier("AircraftModal") as! AircraftPickerVC
let pc = aircraftModal.popoverPresentationController
pc?.sourceView = self.view
pc?.delegate = self
return aircraftModal
}
注意我怎么也得的controller
类型设置为LogbookFormTVC
,以便其协议符合它进来了。但是我希望这个函数能够与任何类(当然符合正确的协议)一起工作。
所以这样做不起作用:
func showAircraftPicker(controller: AnyObject) -> UIViewController{
//Set up modal
let storyboard = UIStoryboard(name: "Popovers", bundle: nil)
var aircraftModal = storyboard.instantiateViewControllerWithIdentifier("AircraftModal") as! AircraftPickerVC
let pc = aircraftModal.popoverPresentationController
pc?.sourceView = self.view
pc?.delegate = self <-- !!! Type AnyObject does not conform to protocol UIPopoverPresentationControllerDelegate !!!
return aircraftModal
}
我怎样才能使该功能的工作与任何类,并通过对类的协议一致性?
什么类是你的'showAircraftPicker:在'方法?如果您要将委托分配给'self',则需要确保'self'符合'UIPopoverPresentationControllerDelegate'。 – AdamPro13
它不在课堂上。这是一个独立的帮手功能。 –
如果你想引用'self',你将需要在类扩展中编写函数。你可能会希望它是一个'UIViewController'扩展。或者你是否试图将代理设置为传入的“控制器”? – AdamPro13