繁体   English   中英

从iPhone上的弹出视图控制器传回数据

[英]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)

我没有任何错误,只是停止工作。

有什么建议?

非常感谢

prepareForSeguedestinationViewController是您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM