2016-05-24 12 views
2

UIColorを別のviewControllerに "show" segueで渡して、背景色が選択した色ボタンの色と一致するようにしようとしています。私はボタンの送信者タグを印刷するこのビットのコードを持っていますが、それはそのセグを実行していません。送信者でスウィフトでSegueを準備する

私は間違っていますか?以前は送信者のタグで作業したことがないので、愚かなことになるかもしれませんが、わかりません。

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

これはストーリーボードレイアウトです。すべて正しく接続されており、セグの識別子はストーリーボードの識別子と一致します。

enter image description here

enter image description here

+0

ストーリーボードに正しく接続されていますか?また識別子 – Shubhank

+0

をチェックしてください。こんにちはShubhank、私はちょうど私を助けるために親切な誰かを助けるためにいくつかの写真を追加! –

+0

prepareForSegueはまったく呼び出されていますか?そうでない場合は、ストーリーボードをチェックして、左側のView Controllerに適切なクラスが割り当てられていることを確認します。 Interface Builderのボタンから直接セグを作成した場合でも遷移は起こりますが、クラスがインスタンス化されていないため、クラスメソッドが呼び出されません。 –

答えて

4

チェックするためにいくつかの点:左のビューコントローラは、あなたのクラスは、IBでそれに割り当てられた

  • を持っていますか?
  • 実際にセグをトリガーするものはありますか?あなたのボタン操作のどちらも、performSegueWithIdentifier(_:sender:)

への呼び出しを含んでいません。これは非常に危険なコードブロックです。あなたはそのような送信者を強制的にアンラップするべきではありません。代わりに、次のようなことを検討してください:

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. 
} 
関連する問題