내 프로젝트에서 자동 완성 작업을하고 있는데, textfieldDidChange 값을 감지하고 그 후에 메소드 (API 링크)를 호출하면 그 이후에 500MS가 발생합니다.Textfield didChange with timer
충분히 명확 해 주시기 바랍니다. 도움 주셔서 감사합니다.
내 프로젝트에서 자동 완성 작업을하고 있는데, textfieldDidChange 값을 감지하고 그 후에 메소드 (API 링크)를 호출하면 그 이후에 500MS가 발생합니다.Textfield didChange with timer
충분히 명확 해 주시기 바랍니다. 도움 주셔서 감사합니다.
먼저 클래스는 TextField의 대리자를 만들 확인 이 :
var timer = Timer()
var count = 0
func textFieldDidChange(textField: UITextField){
timer.invalidate()
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.timerFunc), userInfo: nil, repeats: true)
}
func timerFunc(){
count += 1
if count == 5{
timer.invalidate()
// do your things here down here, I assumed that your method is called autocomplete
autocomplete()
}
}
희망이 도움이됩니다!
는 스위프트 3에서, 당신은 아마 "편집이 변경" "값이 변경"하지에 연결하고 타이머를 재설정하고 또 다른 타이머를 시작하려면 :
weak var timer: Timer?
@IBAction func didChangeEditing(_ sender: UITextField) {
timer?.invalidate()
timer = .scheduledTimer(withTimeInterval: 0.5, repeats: false) { [weak self] timer in
// trigger your autocomplete
}
}
을 또는 당신은 다른 방법 shouldChangeCharactersIn
에 연결할 수 있습니다. 예를 들면 : 당신이 좋아, 타이머를 사용할 수 있습니다, 그 후
textField.delegate = self
numbersTextField.addTarget(self, action: #selector(self.textFieldDidChange), for: .editingChanged)
: viewDidLoad()
에서 다음
class yourClass: UIViewController, UITextFieldDelegate{
//...
}
그리고 :
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self // or you can do this in IB
}
weak var timer: Timer?
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
timer?.invalidate() // cancel prior timer, if any
timer = .scheduledTimer(withTimeInterval: 0.5, repeats: false) { [weak self] timer in
// trigger your autocomplete
}
return true
}
}
많은 감사 !!!! –