Swift 如何防止双击按钮

Swift 如何防止双击按钮,swift,uibutton,action,Swift,Uibutton,Action,如何防止http请求时双击按钮 我尝试过这段代码,但在双击中,我的请求被发送到服务器两次。请给我答案 @IBAction func btnSendForgetPwdAction(_ sender: UIButton) { sender.isUserInteractionEnabled = false if checkIfFieldsAreFilledInforgetPwd(){ self.showProgressView() var requestParams:

如何防止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
  })
@IBAction func btnSendForgetPwdAction(uu发送方:ui按钮){
sender.isUserInteractionEnabled=false
如果选中字段已填写ForgeTPWD(){
self.showProgressView()
var requestParams:Dictionary=[:]
requestParams[“email”]=textfieldmailforgetpwd.text
让url=Constants.url.PREFIX\u url+Constants.url.FORGET\u密码
DataHelper.sharedInstance.alamofireManager().request(url,方法:.post,参数:requestParams,编码:URLEncoding.default,头:nil)。responseJSON{(响应:DataResponse)位于
self.hideProgressView()
开关(response.result){
case.success(让JSON):
如果let response=JSON as?NSDictionary{
打印(“JSON\(响应)”)
如果让issucess=response.object(forKey:“success”)作为?Bool{
}
//我这里有一些代码
scheduledTimer(具有时间间隔:2,重复:false,块:{[weak sender]Timer in
发件人?.isUserInteractionEnabled=true
})

如果您正在进行异步Web服务调用,则需要等待该调用完成,直到重新启用按钮。不要使用计时器,因为您不知道调用需要多长时间才能完成

没有看到你的服务器呼叫,我无法给出完整的答案,但你应该这样做

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

您是否尝试过isEnabled?没有,我只是尝试了我问题中的代码。首先,按照建议编辑您的问题,以便其他人能够理解,否则他们会投票反对您的错误格式。第二,我将提供一个答案作为在这种情况下尝试的建议注意:当您使用
NSDictionary
N时,不要在SWIFT中使用
NSDictionary
SArray
您丢弃类型信息。使用包含您所需实际类型的Swift
字典
数组
。我删除计时器,我尊重您的解决方案的工作