2016-05-24 21 views
2

Ich versuche, eine UIColor zu einem anderen ViewController über eine "Show" Überleitung zu übergeben, so dass die Farbe des Hintergrunds mit der Farbe der Schaltfläche übereinstimmen kann, die ausgewählt wurde. Ich habe dieses Bit Code, der die Schaltflächen Absender-Tag druckt, aber es führt diesen Übergang nicht aus.Vorbereiten für Segue in Swift mit Absender

Was mache ich falsch? Ich habe noch nie mit Absender-Tags gearbeitet, also könnte es etwas Dummes sein, aber ich bin mir nicht sicher.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     if segue.identifier == "toQuiz" { 
      if sender?.tag == 1 { 

       let viewController:ViewController = segue.destinationViewController as! ViewController 
       let color = UIColor.blueColor() 
       viewController.passedColor = color 

      } else if sender!.tag == 2 { 

       let viewController:ViewController = segue.destinationViewController as! ViewController 
       let color = UIColor.greenColor() 
       viewController.passedColor = color 

      } else if sender!.tag == 3 { 

       let viewController:ViewController = segue.destinationViewController as! ViewController 
       let color = UIColor.yellowColor() 
       viewController.passedColor = color 

      } 
     } 
    } 

    @IBAction func athButtonTapped(sender: AnyObject) { 

     let athleteQuiz = sender as! UIButton 
     print("Button \(athleteQuiz.tag) was pressed!") 
    } 

    @IBAction func actorButtonTapped(sender: AnyObject) { 

     let actorQuiz = sender as! UIButton 
     print("Button \(actorQuiz.tag) was pressed!") 
    } 

    @IBAction func musicButtonTapped(sender: AnyObject) { 

     let musicQuiz = sender as! UIButton 
     print("Button \(musicQuiz.tag) was pressed!") 
    } 

Dies ist das Storyboard-Layout - sie sind alle richtig angeschlossen und die Kennung für den Übergang übereinstimmt, in dem Storyboard.

enter image description here

enter image description here

+0

sind Ihre Segmente ordnungsgemäß im Storyboard verbunden? Überprüfen Sie auch die Kennung – Shubhank

+0

Hallo Shubhank, ich habe nur ein paar Bilder hinzugefügt, um weiter zu helfen, jemand, der freundlich genug ist, um mir zu helfen! –

+0

Wird der prepareForSegue überhaupt aufgerufen? Wenn nicht, überprüfen Sie Ihr Storyboard und stellen Sie sicher, dass dem linken Ansichtscontroller die richtige Klasse zugewiesen ist. Wenn Sie direkte Übergänge von den Schaltflächen im Interface Builder herstellen, würde der Übergang dennoch stattfinden, aber Ihre Klassenmethoden würden nicht aufgerufen, weil Ihre Klasse nicht instanziiert wird. –

Antwort

4

Einige Dinge zu überprüfen:

  • Ist die linke View-Controller haben die Klasse, um es in IB zugeordnet?
  • Gibt es tatsächlich etwas, das den Übergang auslöst? Keine der Tastenaktionen enthält einen Anruf an

Dies ist auch ein sehr gefährlicher Codeblock; Sie sollten den Absender nicht zwangsweise auspacken. Erwägen Sie stattdessen, etwas wie folgt zu tun:

guard let id = segue.identifier else { return } // Bail if there isn't a segue ID. 
if id == "toQuiz" { 
    guard let tag = (sender as? UIView)?.tag else { return } // Bail if we can't get a tag. 

    // Continue examining the tag. 
}