2016-07-24 62 views
4

如何将数据从PopoverViewController传回iPhone上的主视图控制器?将数据从iPhone上的弹出窗口视图控制器传回给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)" 
    } 
} 

利用上述我可以传递数据回主视图控制器不会有问题的代码,问题是popover不起作用,它就像一个占用整个屏幕的常规ViewController

有趣的是,如果我评论下面的代码行popover工作,但我不能再传回数据,我可以看到popover,但传递的数据停止工作。

// if I comment this line 
self.presentViewController(pvc, animated:false, completion:nil) 

我没有得到任何错误,只是一个停止工作。

有什么建议吗?

非常感谢

回答

2

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 
    } 
} 
+0

@ vacawama - 该酥料饼不工作时,将数据传递工作,但是酥料饼的viewController填满整个屏幕。谢谢 –

+1

当您在故事板中连接Segue时,是否选择了'presentAsPopover'? – vacawama

+0

是的,我做到了。谢谢 –

相关问题