2016-07-24 25 views
4

Wie kann ich Daten von einem PopoverViewController an den Hauptansicht-Controller auf einem iPhone zurückgeben?Daten von einem Popover-View-Controller auf dem iPhone zurückgeben

Ich weiß, ich mache etwas schrecklich falsch, aber ich kann es nicht herausfinden. Hier

ist der 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!) 
     } 
    } 
} 

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

Mit dem obigen Code-I-Daten zurück zur Hauptansicht-Controller ohne Probleme passieren kann, Das Problem ist, dass das Popover nicht funktioniert, es funktioniert nur wie eine normale ViewController den gesamten Bildschirm besetzt.

Die lustige Sache ist, dass, wenn ich die folgende Codezeile kommentieren das Popover funktioniert, aber ich kann Daten nicht mehr zurück übergeben, kann ich das Popover sehen, aber die Datenübergabe funktioniert nicht mehr.

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

Ich bekomme keine Fehler, man hört einfach auf zu arbeiten.

Irgendwelche Vorschläge?

Vielen Dank

Antwort

2

In prepareForSegue, die destinationViewController ist Ihr PopoverViewController. Sie müssen es umwandeln und die delegate darauf setzen, so dass Sie Daten zurückgeben können, und Sie müssen auch die popoverPesentationController?.delegate setzen. Sie brauchen nicht den Rest des Codes in 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 - Die popover funktioniert nicht, die Übergabe von Daten funktioniert, aber die popover Viewcontroller füllt den gesamten Bildschirm. Danke –

+1

Hast du 'presentAsPopover' gewählt, als du den Abschnitt im Storyboard verdrahtet hast? – vacawama

+0

Ja, tat ich. Danke –