как перезапустить таймер в swift - PullRequest
0 голосов
/ 02 июля 2018

Я делаю приложение, где я использую экран OTP. Я работал с функцией таймера, а также смог изменить текст и снова показать таймер. моя проблема в том, что я не могу перезапустить таймер снова. это застревает в 00:10.

Вот мой следующий код, пожалуйста, помогите !!

@IBOutlet weak var butttonName: ButtonDesign!
var countTimer:Timer!
var counter = 10
var restartTimer = false
var isTimerRunning = false

override func viewDidLoad() {
if isTimerRunning == false {
        startTimer()}
}

func startTimer() {
self.countTimer = Timer.scheduledTimer(timeInterval: 1 , target: self, selector: #selector(OTPVerificationViewController.changeTitle), userInfo: nil, repeats: true)
isTimerRunning = true
}
@objc func changeTitle()
{
    if counter != 0
    {
        butttonName.setTitle(timeString(time: TimeInterval(counter)), for: .normal)
        counter -= 1
        butttonName.isEnabled = false

    }  else {
        countTimer.invalidate()
        butttonName.setTitle("Resend", for: .normal)
    }
}

@IBAction func verifyButton(_ sender: UIButton) {
if butttonName.currentTitle == "Resend" {
        print("clicked when name is resend !!!")
        if restartTimer == true {
            startTimer()
            restartTimer = false
        }
    } else {
        print("clicked when it is name is verify")
        self.performSegue(withIdentifier: "confirmPassword", sender: self)
    }
}

Я хочу перезапустить таймер всякий раз, когда пользователь нажимает кнопку «Переслать», и хочу выполнять переход, когда пользователь нажимает кнопку «Подтвердить». обе кнопки одинаковы я меняю имя во время выполнения

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Просто сделайте метод, как показано ниже:

 var count = 120
func updateCounter(){
    if #available(iOS 10.0, *) {
        Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { (timer) in
            if(self.count > 0){
                self.lblTime.text = "\(self.count)"
                self.count = self.count-1
            }else {
                self.lblTime.text =  "0"
                timer.invalidate()
                self.btnresend.isHidden = false // in your case you can change the title of the button
            }
        })
    } else {
        // Fallback on earlier versions
        Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.timerMethod), userInfo: nil, repeats: true)
    }
}

@objc func timerMethod() {
    if(self.count > 0){
        self.lblTime.text = "\(self.count)"
        self.count = self.count-1
    }else {
        self.lblTime.text =  "0:0"
        self.btnresend.isHidden = false
    }
}

А откуда вы хотите перезапустить время, просто вызовите метод счетчика обновлений

с установленным количеством 120 или вы хотите

self.count = 120
0 голосов
/ 02 июля 2018

Вам нужно перезапустить счетчик тоже

if butttonName.currentTitle == "Resend" {
   counter = 10
   // startTimer()
}
...