2015-07-28 1 views
0

J'utilise dispatch_after dans mon textfieldiOS Dispatch obtenir le dernier élément du temps de retard

(Func SearchBar (SearchBar: UISearchBar, textDidChange searchText: String))

seulement tirer mon println une fois 5 secondes

Cas d'utilisation: - Type "ABCDE" fastly - Get Back "ABCDE" println retour

au lieu de (au bout de 5 secondes) - un - ab - abc - abcd - ABCDE

 let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(5 * Double(NSEC_PER_SEC))) 

    dispatch_after(delayTime, dispatch_get_main_queue()) { 

     println("test: \(searchText)") 
    } 
+0

Vous avez utilisé la méthode textDidChange qui obtient appel à chaque changement dans le champ texte. Vous devriez écrire votre code dans la méthode textfielddidengediting. –

Répondre

0

Vous pouvez introduire une nouvelle var timer: NSTimer?

Ensuite, dans votre texte DidChange fonction que vous pourriez faire quelque chose comme

if timer == nil { 
    timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "printTextFieldInput:", userInfo: textField, repeats: false) 
} 

La fonction correspondante pour imprimer ressemblerait à ceci:

func printTextFieldInput(timer: NSTimer) -> Void { 
    if let textField = timer.userInfo as? UITextField { 
    println(textField.text) 
    } 
    timer.invalidate() 
    self.timer = nil 
}