Dis*_*ame 2 delegates storyboard swift
在故事板中,我有一个视图控制器,它与另一个视图控制器有一个转场,并应用了“呈现为弹出框”。如果我不添加任何代码,这将按 id 期望的那样工作。
问题:我需要让委托工作,这样我才能从弹出窗口中取回数据。我在弹出窗口中创建了委托。
我已经添加了
class LoginView: UIViewController,UIPopoverPresentationControllerDelegate, UIPopoverControllerDelegate,KeypadDelegate
Run Code Online (Sandbox Code Playgroud)
我已将这些功能添加到我的主视图控制器中。
我的问题是如何在 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
}
}
Run Code Online (Sandbox Code Playgroud)
segue 被公然称为 KeyPadLoad,但是当应该在弹出窗口中调用委托函数时,什么也没有发生。
我究竟做错了什么
谢谢
您必须UIPopoverPresentationControllerDelegate在呈现 Popover 的类中实现 。该UIPopoverPresentationControllerDelegate协议的方法允许您自定义基于弹出框的演示文稿的行为。
如果你已经设置了一个转场去弹出框并且你设置了转场,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")
}
}
Run Code Online (Sandbox Code Playgroud)
类PopOverViewController只是一个UIViewController处理 Popover 的类,没有更多,类似于以下代码:
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.
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,您应该会看到以下消息:
dismissed
Run Code Online (Sandbox Code Playgroud)
每次都PopOverViewController被解雇。
我希望这对你有帮助。
| 归档时间: |
|
| 查看次数: |
5508 次 |
| 最近记录: |