Как исправить этот код, чтобы позволить таймеру начать в результате нажатия пользователем на UIAlert? - PullRequest
0 голосов
/ 02 мая 2019

Попытка запустить таймер в результате нажатия UIAlert.Но я продолжаю получать эту ошибку, указывающую, что экземпляры isTimerRunning и runTimer нельзя использовать на третьем контроллере.с этими функциями все будет в порядке.

Когда мы настроили его на использование 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 голосов
/ 02 мая 2019

// использовать метод таймера выполнения в контроллере предупреждений). Поэтому вы можете запустить таймер с предупреждением об открытии

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