Textfield与计时器一起改变

Kev*_*bbe 3 api autocomplete uitextfield swift

我正在我的项目中进行自动完成,我想检测textfieldDidChange值的时间并在此之后调用一个方法(链接到API)500MS.

我希望它很清楚,谢谢你的帮助!

Rob*_*Rob 5

在Swift 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
    }
}
Run Code Online (Sandbox Code Playgroud)

或者你可以选择加入shouldChangeCharactersIn.例如:

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
    }
}
Run Code Online (Sandbox Code Playgroud)