Как дать отсчет для OTP в Swift - PullRequest
0 голосов
/ 08 ноября 2019

Мне нужно дать 60 секунд на обратный отсчет времени для повторной отправки ОТП. и если я нажму на verifyOtp butn, тогда начнется обратный отсчет. и я хочу, чтобы этот срок истекал. во время обратного отсчета повторная отправка otpbutton, чтобы отключить .. пожалуйста, предложите мне, как установить обратный отсчет для resendotp.

я получаю otp в registrService ().

    do{
                var json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String: Any]
                let regUserStatus = json["status"] as? String

                if regUserStatus == "sucess"
                {
                    print("the json regggggggggggis \(json)")
                    let phNum = json["mobile_number"] as? Int
                    let status = json["status"] as? String
                    self.otpField = json["otp"] as? Int
                }
                else{
                    DispatchQueue.main.async {
                        self.registerButton.isHidden = false
                        self.sendOtpButton.isHidden = true
                        self.otpTextField.isHidden = true
                        self.resendButn.isHidden = true
                        self.otpcountLabel.isHidden = true
                        AlertFun.ShowAlert(title: "", message: "user exist", in: self)
                    }

                }
            }

resendButton.

   @IBAction func resendOtpButn(_ sender: Any) {
    print("resendotp tapped")

    registerService()
   }

1 Ответ

1 голос
/ 08 ноября 2019

После того, как вы запустили процесс OTP, вам нужно создать 60-секундный таймер, который по истечении срока его действия запускает метод селектора:

создать свойство таймера уровня класса:

var otpTimer: Timer?

создайте таймер при нажатии кнопки reg *

@IBAction func regButn(_ sender: Any) {
  registerService()
  startTimer()
}

func startTimer() {
  optTimer?.invalidate(). //cancels it if already running
  optTimer = Timer.scheduledTimer(timeInterval: 60, target: self, selector: #selector(timerDidFire(_:)), userInfo: userInfo, repeats: false)
}

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

@objc func timerDidFire(_ timer: Timer) {

   // timer has completed.  Do whatever you want...
}

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

@IBAction func resendOtpButn(_ sender: Any) {
  registerService()
  startTimer()
}

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

self.optTimer?.invalidate()
...