2017-05-28 4 views
0

Hier ist eine andere Version einer der beliebtesten Fragen zu Stackoverflow. Es tut uns leid. Vielen Dank.wie Sie Daten an mehrere Viewcontroller von der gleichen Schaltfläche übergeben

Ich habe einen Viewcontroller, der 30 Tasten hat. Jede dieser Schaltflächen kann auf der Grundlage einer Variablen, die von einem vorherigen Ansichtscontroller gesendet wird, zu einem von 20 Viewcontrollern wechseln.

Ich weiß, wie man Daten von einem Viewcontroller zu einem anderen sendet, und ich weiß, wie man eine Schaltfläche mit mehreren Viewcontrollern abhängig von einer übergebenen Variablen verbindet, aber ich weiß nicht, wie man eine Variable von einer Schaltfläche an was auch immer übergeben Viewcontroller wird von den variablen angegeben ...

Meine Viewcontroller wie folgt aussehen:

@IBAction func didTapButton(_ sender: UIButton) { 
    if passedvariable == "A" { 
     performSegue(withIdentifier: "ToA", sender: self) 
    if passedvariable == "B" { 
     performSegue(withIdentifier: "ToB", sender: self) 
    } 

ich habe versucht, so etwas wie dieses Hinzufügen ...

@IBAction func didTapButton(_ sender: UIButton) { 
    if passedvariable == "A" { 
     performSegue(withIdentifier: "ToA", sender: self)  
      let send = segue.destination as! AViewController 
      send.NewVariableToSend = (sender as! UIButton).title(for: .normal)!} 
    } 

Aber das funktioniert nicht ... Ich fühle mich, als ob ich in der Nähe bin, aber die Punkte noch nicht verbinden kann. Jede Hilfe wird sehr geschätzt, danke!

Antwort

1

Wie greifen Sie auf den tatsächlichen Übergang von der IBAction-Methode Ihrer UIButton? Dieser Ansatz ist falsch. Verwenden Sie die Methode PrepareForSegue, um Ihre Daten an den nächsten ViewController zu übergeben. Es ist eine vordefinierte Methode, so dass Sie diese Methode in Ihrer Klasse ViewController überschreiben müssen.

Try this .. Hinweis: guard let verwendet wird loszuwerden Absturz zu erhalten, wenn Sie einen Nullwert zu Ihrem nächsten ViewController zu passieren versucht.

@IBAction func didTapButton (_ sender: Any) { 
     //First get the clickedButton Object if you do not have IBOutlet of that button 
     guard let clickedButton = sender as? UIButton else {return} 
     //Pass the clicked button to Segue perform as a sender 
     self.performSegue(withIdentifier: "yourSegueIdentifier", sender: clickedButton) 

    } 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "yourSegueIdentifier" { 
      //Now get you destination viewcontroller and type cast it into your desired ViewController class 
      guard let nextVC = segue.destination as? YourViewController else {return} 
      //Now convert the sender into your clicked button because you have previously set the clickedButton as sender when you try to perform this segue 
      guard let clickedButton = sender as? UIButton else {return} 
      //Now Simply assign this to nextVC 
      nextVC.button = clickedButton 
     } 

    } 
+0

Vielen Dank für Ihre Antwort! Immer noch herausfinden, wie es funktioniert ... Wie bekomme ich das clickedButton Object? – tfcamp

+0

In Ihrem IBAction Button klicken Sie auf einen Parameter mit dem Namen sender. Dadurch wird die angeklickte Schaltfläche automatisch angezeigt. –

Verwandte Themen