Transferring data from the popover view controller to iPhone

How to transfer data back from PopoverViewController to the main view controller on iPhone?

I know that I am doing something terribly, but I cannot understand.

Here is the code: 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!)
        }
    }
}

Main 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)"
    }
}

With the above code, I can easily transfer the data back to the main view controller, the problem is that the popover does not work, it just acts like a normal one ViewController, occupying the entire screen.

The funny thing is that if I comment on the next line of code, popover works, but I can no longer transfer data back, I see popover, but the transmission data stops working.

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

I get no errors, one just stops working.

Any suggestions?

Thank you so much

+4
1

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

Source: https://habr.com/ru/post/1648960/


All Articles