iOS Dispatch получает последний элемент времени задержки

Я использую dispatch_after в своем текстовом поле

(в func searchBar (searchBar: UISearchBar, textDidChange searchText: String))

запускать мой println только раз в 5 секунд.

Пример использования: - Быстро введите "abcde" - Верните "abcde" println назад

Вместо (через 5 секунд) - a - 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)")
    }

person shoujo_sm    schedule 28.07.2015    source источник
comment
Вы использовали метод textDidChange, который вызывается при каждом изменении текстового поля. Вы должны написать свой код в методе textfielddidengediting.   -  person Ashish P.    schedule 28.07.2015


Ответы (1)


Вы могли бы представить новый var timer: NSTimer?

Затем в вашей функции textDidChange вы можете сделать что-то вроде

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

Соответствующая функция для печати будет выглядеть так:

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