情节提要中的弹出窗口,如何处理委托
Popovers in Storyboard, how to handle the delegate
在情节提要中,我有一个视图控制器,它与另一个 viewcontroller 有一个 segue,并应用了 "Present As 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 的 class 中实现 UIPopoverPresentationControllerDelegate
。 UIPopoverPresentationControllerDelegate
协议的方法允许您自定义基于弹出窗口的演示文稿的行为。
如果你已经设置了一个转到 Popover 的 segue 并且你将 segue 设置为 Present as Popover
那么你的 class 必须是这样的:
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")
}
}
其中 class 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
被关闭。
希望对你有所帮助。
在情节提要中,我有一个视图控制器,它与另一个 viewcontroller 有一个 segue,并应用了 "Present As 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 的 class 中实现 UIPopoverPresentationControllerDelegate
。 UIPopoverPresentationControllerDelegate
协议的方法允许您自定义基于弹出窗口的演示文稿的行为。
如果你已经设置了一个转到 Popover 的 segue 并且你将 segue 设置为 Present as Popover
那么你的 class 必须是这样的:
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")
}
}
其中 class 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
被关闭。
希望对你有所帮助。