我需要为重新发送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/