如何将数据从 PopoverViewController 传回 iPhone 上的主 View Controller ?
我知道我在做一些非常错误的事情,但我无法弄清楚。
这是代码:
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)"
}
}
使用上面的代码,我可以毫无问题地将数据传递回主 View Controller ,问题是弹出窗口不起作用,它就像一个占据整个屏幕的常规
ViewController
。有趣的是,如果我注释以下代码行,popover 可以工作,但我无法再传回数据,我可以看到 popover 但传递的数据停止工作。
// if I comment this line
self.presentViewController(pvc, animated:false, completion:nil)
我没有收到任何错误,只是停止工作。
有什么建议么?
非常感谢
最佳答案
在 prepareForSegue
中, destinationViewController
是你的 PopoverViewController
。您需要将它转换为那个并在其上设置 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
}
}
关于ios - 从 iPhone 上的弹出 View Controller 传回数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38556247/