gpt4 book ai didi

swift - Storyboard 中的弹出窗口,如何处理委托(delegate)

转载 作者:可可西里 更新时间:2023-11-01 01:06:04 25 4
gpt4 key购买 nike

在 Storyboard 中,我有一个 View Controller ,它有一个到另一个 View Controller 的 segue,应用了“Present As Popover”。如果我不添加任何代码,这将按 id 预期的方式工作。

问题:我需要让委托(delegate)工作,以便我可以从弹出窗口取回数据。我在弹出窗口中创建了委托(delegate)。

我已经添加了

class LoginView: UIViewController,UIPopoverPresentationControllerDelegate, UIPopoverControllerDelegate,KeypadDelegate

我已将这些功能添加到我的主视图 Controller 中。

我遇到的问题是如何在 segue 上设置委托(delegate)。

我试过了

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,但是当应该在弹出窗口中调用委托(delegate)函数时,什么也没有发生。

我做错了什么

谢谢

最佳答案

您必须在呈现 Popover 的类中实现 UIPopoverPresentationControllerDelegateUIPopoverPresentationControllerDelegate 协议(protocol)的方法可让您自定义基于弹出窗口的演示文稿的行为。

如果你已经设置了一个转到 Popover 的 segue 并且你将 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 被关闭。

希望对你有帮助

关于swift - Storyboard 中的弹出窗口,如何处理委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853462/

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