Swift 文本字段随计时器而变化

Swift 文本字段随计时器而变化,swift,api,autocomplete,uitextfield,Swift,Api,Autocomplete,Uitextfield,我正在我的项目中进行自动完成,我想检测textfieldDidChange值的变化,并在500毫秒后调用一个方法(链接到API) 我希望足够清楚 谢谢你的帮助 在Swift 3中,您可能希望连接到“编辑更改”而不是“值更改”,然后重置计时器并启动另一个计时器: weak var timer: Timer? @IBAction func didChangeEditing(_ sender: UITextField) { timer?.invalidate() timer = .s

我正在我的项目中进行自动完成,我想检测textfieldDidChange值的变化,并在500毫秒后调用一个方法(链接到API)

我希望足够清楚
谢谢你的帮助

在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
    }
}
或者您也可以挂接到中的
shouldchangeCharacters。例如:

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
    }
}

首先确保您的类是TextField的委托:

class yourClass: UIViewController, UITextFieldDelegate{
    //...
}
然后在
viewDidLoad()
中:

之后,您可以使用计时器,如下所示:

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()
    }
}
希望有帮助

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()
    }
}