2017-12-12 4 views
-1

Ich übergebe die Daten von einem VC zurück zum ersten VC. Ich verwende diesen Code:Ich bin nicht in der Lage, Daten von einem VC zu einem anderen zu übergeben

@IBAction func goBack(_ sender: Any) { 
    dismiss(animated: true, completion: nil) 
    print(self.entryField.text!) 
    performSegue(withIdentifier: "sendText", sender: self) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let destVC = segue.destination as! ViewController 
    let printName = self.entryField.text! 
    print(self.entryField.text!) 
    destVC.nameToDisplay=printName 
} 

Dies ist mein Code des VC, in dem die Daten sind.

Der Code des VC, in dem ich mein Ergebnis anzeigen möchte.

var nameToDisplay = "" 

override func viewWillAppear(_ animated: Bool) { 
    titleDisplay.text=nameToDisplay 
} 

Ich bin nicht in der Lage, die Daten zu übergeben, ich versuchte, die nameToDisplay Druck, aber es gibt leere Zeichenfolge.

Antwort

0

Ein vernünftiges Muster für das Bestehen des Wertes aus dem zweiten Controller zum ersten zurück, wie dies sein könnte:

class FirstViewController: UIViewController { 
    //...... 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if let secondViewController = segue.destination as? SecondViewController { 
      secondViewController.nameHandler = { (name) -> Void in 
       titleDisplay.text=nameToDisplay //second controller will call back here to pass the name value when it's going back. 
      } 
     } 
    } 

    //...... 
} 

class SecondViewController: UIViewController { 
    //...... 

    var nameHandler:((_ name:String)->Void)? //a closure to call back name 

    @IBAction func goBack(_ sender: Any) { 
     if let name = self.entryField.text { 
      self.nameHandler?(name) //call back and pass the name to the first controller 
     } 
     dismiss(animated: true, completion: nil) 
    } 

    //...... 
} 
0

Sie suchen zwischen Viewcontrollers für 00.59 Kommunikation. Dies kann auf verschiedene Arten in iOS erreicht werden.

1- Delegation

2- Blöcke, Verschlüsse.

Die obige Lösung verwendet Block. Ich werde Ihnen mit Delegierten sagen

class FirstVC: UIViewController, PassData { 
func pushVC() { 
    let secondVC = SecondVC() 
    secondVC.delegate = self 
    self.navigationController?.pushViewController(secondVC, animated: true) 
} 

func passDataOnDismiss(data: String) { 
    print(data) 
}} 

protocol PassData: class { 
func passDataOnDismiss(data: String) 
} 

class SecondVC: UIViewController { 
    weak var delegate: PassData? 
    @IBAction func didButtonPress() { 
     self.delegate?.passDataOnDismiss(data: "I am passing this string back to First VC") 
     self.navigationController?.popViewController(animated: true) 
    } 
} 
+0

Ich bin neu in iOS Dev, können Sie sagen, was ich falsch in meinem Code getan habe? –

Verwandte Themen