swift - 如何防止双击按钮
问题描述
如何防止在http请求的情况下双击按钮我已经尝试过这段代码,但是在双击我的请求被发送到服务器两次。请给我解决方案
@IBAction func btnSendForgetPwdAction(_ sender: UIButton) {
sender.isUserInteractionEnabled = false
if checkIfFieldsAreFilledInforgetPwd(){
self.showProgressView()
var requestParams: Dictionary<String, String> = [:]
requestParams["email"] = textFieldEmailForgetPWD.text
let url = Constants.URLs.PREFIX_URL+Constants.URLs.FORGET_PASSWORD
DataHelper.sharedInstance.alamofireManager().request(url, method: .post, parameters: requestParams, encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
self.hideProgressView()
switch(response.result) {
case .success(let JSON):
if let response = JSON as? NSDictionary{
print("JSON \(response)")
if let isSuccess = response.object(forKey: "success") as? Bool{
}
// i have some code here
Timer.scheduledTimer(withTimeInterval: 2, repeats: false, block: { [weak sender] timer in
sender?.isUserInteractionEnabled = true
})
解决方案
如果您正在进行异步 Web 服务调用,则需要等到调用完成后再重新启用您的按钮。不要使用计时器,因为您不知道通话需要多长时间才能完成。
如果没有看到你的服务器调用,我无法给出完整的答案,但你应该做这样的事情......</p>
@IBAction func btnBackAction(_ sender: UIButton) {
sender.isUserInteractionEnabled = false
Webservice().loadData { result in // Your async server call
sender.isUserInteractionEnabled = true
// Handle the result
// performSegue goes here if you need to wait until your server call is complete
self.performSegue(withIdentifier: "HomePageViewController", sender: nil)
}
}
推荐阅读
- php - Opencart:如何根据复选框状态返回值?
- laravel - Laravel 6.0.3 未加载关键资源 App.js 或 App.css 404 Not Found
- c++ - 为什么使用 and 运算符比较 if 语句中的 2 个对象在使用 2 个 if 语句不时会引发错误
- latex - Tex:使用SIAM模板将两列句子和一张表格放在一页上
- python - 如何掩盖图像中除内部特定颜色外的所有内容
- python - 如何使用 selenium webdriver 获取 Youtube 视频标题
- python - 如何为多个地块分配单独的标题
- regex - 正则表达式,1)调用最后一个匹配组 2)匹配一行中的确切单词(一行中不部分匹配)
- python - DRF,如何将 api 端点的接口参数传递给其他程序员?
- google-cloud-platform - 将 Airflow XCom 作为 JSON 文件上传到 Google Cloud Storage