2017-01-08 4 views
0

Ich mache ein Spiel, dass wenn eine Taste zweimal gedrückt wird, wird es zu einem anderen View-Controller übertragen. Zurzeit wird die Reaktionszeit des Benutzers im View-Controller a eingestellt. Ich möchte, dass die Zeit angezeigt wird, um Controller b anzuzeigen, und wenn in View Controller b die Zeit um 1 subtrahiert wird. Momentan wird die Zeit nicht angezeigt. Wenn die Taste zweimal gedrückt wird, ändert sich der View-Controller, aber der Text wird nicht übertragen.Segue wird nicht übertragen (swift 3)

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var labelx: UILabel! 
    @IBOutlet var startx: UIButton! 
    @IBOutlet var pressSoccerBall: UIButton! 
    var level = 0 
    var timer: Timer? 
    var isRunning: Bool { 
     get { 
      return timer != nil 
     } 
    } 
    var counter = 0.0 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     labelx.text = String(format: "%.1f", counter) 
     startx.isEnabled = true 
    } 

    @IBAction func startTimer(_ sender: Any) { 
     if isRunning { 
      return 
     } 
     refreshTimer() 
    } 

    @IBAction func PressSoccerBall(_ sender: Any) { 
     level += 1 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     let DestViewController : winViewController = segue.destination as!  winViewController 
     DestViewController.LebelText = labelx.text! 
    } 

    func refreshTimer() { 

     if let timer: Timer = timer { 
      timer.invalidate() 
     } 
     timer = Timer.scheduledTimer(timeInterval: 0.1,target: self,selector: #selector(updateTimer),userInfo: nil, repeats: true) 
     startx.isEnabled = false 
    } 

    func updateTimer() { 
     counter += 0.1 
     labelx.text = String(format: "%.1f", counter) 
     if counter < 9.9 && level == 2 { 
      let nextc = self.storyboard?.instantiateViewController(withIdentifier: "winViewController") as? winViewController 
      self.present(nextc!, animated: true, completion: nil) 
     } 
    } 
} 

pic of vc a

View-Controller B

import UIKit 

class winViewController: UIViewController { 

    @IBOutlet var winningLabel: UILabel! 
    public var LebelText: String? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     steve() 
    } 

    func steve(){ 

     guard let unwrapedText = self.LebelText else { 
      return 
     } 
     if let myInt = Double(unwrapedText){ 
      let myInt = myInt - 1 
      self.winningLabel.text = String(myInt) 

     } else { 
      return 
     } 
    } 

} 

PIC OF VIEW CONTROLLER B

+0

Sie Delegierten verwenden sollten. –

Antwort

0

Sie sind nicht segues verwenden. Sie erstellen die winViewController und rufen dann present auf, um es anzuzeigen. Also, prepareForSegue wird nie aufgerufen werden.

Setzen Sie einfach die LebelText Eigenschaft auf nextc bevor es präsentiert:

func updateTimer() { 
    counter += 0.1 
    labelx.text = String(format: "%.1f", counter) 
    if counter < 9.9 && level == 2 { 
     if let nextc = self.storyboard?.instantiateViewController(withIdentifier: "winViewController") as? winViewController { 
      nextc.LebelText = labelx.text 
      self.present(nextc, animated: true, completion: nil) 
     } 
    } 
} 
Verwandte Themen