[英]Pass data back from a popover view controller on iPhone
如何将数据从PopoverViewController传递回iPhone上的主视图控制器?
我知道我做的事情非常糟糕,但我无法理解。
这是代码:PopoverViewController.swift
protocol PopoverViewControllerDelegate {
func messageData(data: AnyObject)
}
class PopoverViewController: UIViewController {
@IBOutlet weak var inputMessage: UITextField!
var delegate: PopoverViewControllerDelegate?
@IBAction func sendData(sender: AnyObject) {
if inputMessage.text != ""{
self.presentingViewController!.dismissViewControllerAnimated(true, completion: nil)
self.delegate?.messageData(inputMessage.text!)
}
}
}
主ViewController.swift:
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate, PopoverViewControllerDelegate {
@IBOutlet weak var showData: UILabel!
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// popover segue
if segue.identifier == "popoverSegue" {
let popoverViewController = segue.destinationViewController
popoverViewController.popoverPresentationController!.delegate = self
}
// code to comunicate with data in popoverViewController
let pvc = storyboard?.instantiateViewControllerWithIdentifier("popoverViewController") as! PopoverViewController
pvc.delegate = self
self.presentViewController(pvc, animated:false, completion:nil)
}
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.None
}
func messageData(data: AnyObject) {
self.showData.text = "\(data)"
}
}
使用上面的代码,我可以毫无问题地将数据传回主视图控制器,问题是弹出窗口不起作用,它只是像占用整个屏幕的常规ViewController
一样。
有趣的是,如果我评论下面的代码行,popover工作,但我不能再传回数据,我可以看到弹出窗口,但传递的数据停止工作。
// if I comment this line
self.presentViewController(pvc, animated:false, completion:nil)
我没有任何错误,只是停止工作。
有什么建议?
非常感谢
在prepareForSegue
, destinationViewController
是您的PopoverViewController
。 您需要将其popoverPesentationController?.delegate
转换为该对象并设置delegate
,以便您可以传回数据,并且还需要设置popoverPesentationController?.delegate
。 您不需要prepareForSegue
的其余代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// popover segue
if segue.identifier == "popoverSegue" {
let popoverViewController = segue.destinationViewController as! PopoverViewController
popoverViewController.delegate = self
popoverViewController.popoverPresentationController?.delegate = self
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.