2015-10-28 1 views
0

J'ai la fonction suivante:Comment vérifier si l'utilisateur n'écrit rien en 4 secondes?

override func textViewDidChange(textView: UITextView) { 
    super.textViewDidChange(textView) 

    if textView.text.characters.count == 0 { 
     print("stopped") 
    } else { 
     print("typing") 
    } 
} 

Donc, je veux la prochaine:

Par exemple, l'utilisateur est en train de taper quelque chose et arrêté au milieu du texte. Je veux vérifier, si l'utilisateur a écrit quelque chose et arrêté au milieu de la frappe pendant 4 secondes pour exécuter la fonction stopped().

Je l'ai fait:

override func textViewDidChange(textView: UITextView) { 
    super.textViewDidChange(textView) 

    if textView.text.characters.count == 0 { 
     print("stopped") 
    } else { 
     print("typing") 
     let timer = NSTimer.scheduledTimerWithTimeInterval(4.0, target: self, selector: "stopped", userInfo: nil, repeats: false) 
    } 
} 

func stopped() { 
    print("stopped typing") 
} 

mais il fonctionne mon NSTimer chaque fois. Ce n'est pas ce que je veux.

Comment puis-je l'exécuter une seule fois? Par exemple pour vérifier si l'utilisateur n'a rien écrit en 4 secondes pour exécuter stopped(). Juste une fois.

Répondre

2

Vous devez arrêter le chronomètre précédent avec invalidate

var timer 
override func textViewDidChange(textView: UITextView) { 
    super.textViewDidChange(textView) 

    if textView.text.characters.count == 0 { 
     print("stopped") 
    } else { 
     timer.invalidate() 
     print("typing") 
     timer = NSTimer.scheduledTimerWithTimeInterval(4.0, target: self, selector: "stopped", userInfo: nil, repeats: false) 
    } 
} 
0

Vous devez garder une référence sur votre minuterie et annule chaque fois textViewDidChange est appelé, quelque chose comme ça:

var textViewTimer : NSTimer? 
override func textViewDidChange(textView: UITextView) { 
    super.textViewDidChange(textView) 
    textViewTimer.invalidate() 
    if textView.text.characters.count == 0 { 
     print("stopped") 
    } else { 
     print("typing") 
     textViewTimer = NSTimer.scheduledTimerWithTimeInterval(4.0, target: self, selector: "stopped", userInfo: nil, repeats: false) 
    } 
} 

func stopped() { 
    print("stopped typing") 
}