如何在 Swift 中为 OTP 倒计时
How to give count down for OTP in Swift
我需要为重发 otp 设置 60 秒倒计时。如果我点击 verifyOtp butn 然后倒计时停止。我希望那个 otp 是 expire。在倒计时重新发送 otpbutton 被禁用.. 请建议我如何设置重新发送倒计时。
我在 registrService() 中获取 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 秒计时器,当它到期时它会运行一个选择器方法:
创建一个 class 关卡计时器 属性:
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()
我需要为重发 otp 设置 60 秒倒计时。如果我点击 verifyOtp butn 然后倒计时停止。我希望那个 otp 是 expire。在倒计时重新发送 otpbutton 被禁用.. 请建议我如何设置重新发送倒计时。
我在 registrService() 中获取 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 秒计时器,当它到期时它会运行一个选择器方法:
创建一个 class 关卡计时器 属性:
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()