私は自分のプロジェクトでオートコンプリートに取り組んでいます。それからtextfieldDidChangeの値を検出して、それ以降のメソッド(APIへのリンク)を呼び出したいと思います。テキストフィールドdidChange with timer
十分明確であることを願っています。 ありがとうございました!スウィフト3では
私は自分のプロジェクトでオートコンプリートに取り組んでいます。それからtextfieldDidChangeの値を検出して、それ以降のメソッド(APIへのリンク)を呼び出したいと思います。テキストフィールドdidChange with timer
十分明確であることを願っています。 ありがとうございました!スウィフト3では
まず、あなたのクラスの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()
}
}
それが助けてくれることを願っています!
、あなたはおそらく、「値が変更され」ない「の編集を変更」に接続し、タイマーをリセットし、別のタイマーを開始します:
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
}
}
多くのありがとう!!!! –