我如何解决此代码,以允许计时器由于用户单击UIAlert而启动?

时间:2019-05-02 15:58:58

标签: ios swift timer uialertcontroller

由于单击了UIAlert,试图使计时器启动。但是我一直收到此错误,指示实例isTimerRunningrunTimer不能在thirdViewController上使用。

我们一直在尝试解决它,认为这是一个范围问题,但似乎无法使这些功能正常。

当我们将其调整为使用alert.copyAction而不是let ..时,错误更改为“期望的声明”。

var seconds = 60
var timer = Timer()
var isTimerRunning = false
var resumeTapped = false

let alert = UIAlertController(title: "Your wing was damaged! There is also a dust storm incoming! You need to repair the wing and escape to the next planet.", message: nil, preferredStyle: .alert)

let copyAction = UIAlertAction(title: "Copy that mission control!", style: .default, handler: { action in
    if isTimerRunning == false {
        runTimer()
    }
})

func runTimer() {
    timer = Timer.scheduledTimer(timeInterval: 1, target: self,   selector: (#selector(thirdViewController.updateTimer)), userInfo: nil, repeats: true)
}

@objc func updateTimer() {
    if seconds < 1 {
        timer.invalidate()
    } else {
        seconds -= 1
        timeLabel.text = timeString(time: TimeInterval(seconds))
    }
}

func timeString(time:TimeInterval) -> String {
    let hours = Int(time) / 3600
    let minutes = Int(time) / 60 % 60
    let seconds = Int(time) % 60
    return String(format:"%02i:%02i:%02i”, hours, minutes, seconds")
}

override func viewDidLoad() {
    super.viewDidLoad()

    Timer.scheduledTimer(withTimeInterval: 0.0, repeats: false) { (timer) in
        self.alert.addAction(self.copyAction)
        self.present(self.alert,animated: true, completion: nil)
    }
}

1 个答案:

答案 0 :(得分:-2)

//在警报控制器中使用运行计时器方法)。因此您可以使用打开警报启动计时器

override func viewDidLoad() {
super.viewDidLoad()

Timer.scheduledTimer(withTimeInterval: 0.0, repeats: false) { (timer) in
     runtimer()
    self.alert.addAction(self.copyAction)
    self.present(self.alert,animated: true, completion: nil)
}
}