在故事板中,我有一个视图控制器,它有一个segue到另一个viewcontroller,应用了“Present As Popover”。如果我不添加任何代码,这将作为id期望。
问题: 我需要让代表工作,这样我才能从popover中获取数据。我在popover中创建了委托。
我添加了
class LoginView: UIViewController,UIPopoverPresentationControllerDelegate, UIPopoverControllerDelegate,KeypadDelegate
我已将这些功能添加到主视图控制器中。
我遇到的问题是如何在segue上设置委托。
我试过了
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "KeyPadLoad"
{
let popoverViewController = segue.destinationViewController as! UIViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
popoverViewController.popoverPresentationController!.delegate = self
}
}
segue被称为KeyPadLoad,但是当在popover中调用委托函数时,没有任何事情发生。
我做错了什么
由于
答案 0 :(得分:3)
您必须在呈现Popover的类中实现UIPopoverPresentationControllerDelegate
。 UIPopoverPresentationControllerDelegate
协议的方法允许您自定义基于popover的演示文稿的行为。
如果您设置了一个segue转到Popover并将segue设置为Present as Popover
,那么您的类必须是这样的:
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var popOver = segue.destinationViewController as! PopOverViewController
popOver.popoverPresentationController!.delegate = self
}
// Tells the delegate that the popover was dismissed.
func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) {
println("dismissed")
}
}
类PopOverViewController
只是一个处理Popover的UIViewController
,不再是这样的代码:
class PopOverViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
使用上面的代码,您应该看到消息:
dismissed
每次PopOverViewController
被解雇。
我希望这对你有所帮助。