2017-01-08 10 views
0

Я делаю игру, когда при нажатии кнопки дважды она переходит на другой контроллер вида. В настоящее время время реакции пользователей синхронизировано с контроллером a. Я хотел бы, чтобы время было отключено для просмотра контроллера b, а когда в контроллере b наблюдения время вычитается на 1. Прямо сейчас время не выдается. Когда кнопка дважды нажата, контроллер просмотра изменяется, но текст не передается.Segue не переносится (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

Вы должны использовать делегат. –

ответ

0

Вы не используете перетекает. Вы создаете winViewController, а затем вызываете настоящее, чтобы показать его. Таким образом, prepareForSegue никогда не будет вызван.

Просто установите LebelText собственность на nextc до представления его:

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

 Смежные вопросы

  • Нет связанных вопросов^_^