2017-08-09 6 views

Répondre

5

Dans le IBAction, modifiez isUserInteractionEnabled propriété du bouton pour false et le ramener à true lorsque la demande de réseau se termine l'exécution.

+0

Cest une réponse appropriée dans la plupart des cas, mais ne convient pas vraiment à mes besoins. Image un bouton similaire que vous pouvez activer et désactiver, je ne veux pas le désactiver. En fait je pense qu'une minuterie serait une bonne idée pour que le code soit appelé comme une seconde après avoir été pressé quelque chose. –

+1

Sans être plus précis dans votre question, vous ne pouvez pas obtenir une réponse exacte. Pourquoi voudriez-vous appuyer sur un bouton similaire plusieurs fois? Une minuterie est définitivement une mauvaise idée. Imaginez si vous avez vraiment mauvaise connexion, donc une seule demande prend comme 30sec, comment une minuterie de 1sec pourrait-elle aider? –

1

Vous pouvez ajouter un drapeau dans votre classe ou utilisez l'objet de requête pour déterminer si l'application envoie actuellement

Avant de commencer l'envoi changer la valeur true et après avoir fini de régler de nouveau false

de cette façon, vous pouvez utiliser le même bouton comme un bouton d'annulation. ou vous pouvez afficher une alerte à propos de l'Etat d'envoi

est un échantillon ici:

class ViewController: UIViewController { 

    var isSending = false 

    @IBAction func sendTouched(_ sender: UIButton) { 

     guard !isSending else { return } 

     send() 
    } 

    func send() { 

     isSending = true 

     // send data to server 

    } 

    // call this after you finish sending 
    func notifyFinished() { 

     isSending = false 
    } 
}