J'ai un UIButton
qui exécute le code de réseau en cliquant sur. Le code de mise en réseau met à jour un enregistrement sur le serveur. Y a-t-il un moyen d'empêcher l'exécution de ce code de réseau si le bouton est tapoté à plusieurs reprises, car ce serait un gaspillage de ressources?Empêche l'exécution de l'IBAction d'un UIButton si le bouton est tapé de manière répétée
0
A
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.
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
}
}
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. –
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? –