我需要为重新发送otp提供60秒倒计时。如果我点击verifyOtp butn,倒计时停止。我想让otp被证明。在倒计时时间重新发送要禁用的otpbutton。。请建议我如何设置resendopt的倒计时。
我正在registerservice()中获取otp。

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

                }
            }

重新发送按钮。
   @IBAction func resendOtpButn(_ sender: Any) {
    print("resendotp tapped")

    registerService()
   }

最佳答案

启动OTP进程后,需要创建一个60秒计时器,当它过期时,它将运行一个选择器方法:
创建类级计时器属性:

var otpTimer: Timer?

单击注册表按钮时创建计时器
@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()

关于ios - 如何在Swift中为OTP倒数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58770330/

10-14 21:54