简体   繁体   中英

Segue is not being transferred in (swift 3)

I am making a game that when a button is pressed twice, it will transfer to another view controller. Right now the users reaction time is timed in view controller a. I would like the time to be segued to view controller b and when in view controller b the time be subtracted by 1. Right now the time is not being segued. When the button is pressed twice the view controller changes but the text is not being transferred.

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

vc的照片

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
        }
    }

}

视图控制器B

You're not using segues. You are creating the winViewController and then calling present to show it. So, prepareForSegue will never be called.

Simply set the LebelText property on nextc before presenting it:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM