gpt4 book ai didi

ios - 检测用户何时停止/暂停在 Swift 中输入

转载 作者:IT王子 更新时间:2023-10-29 05:38:42 26 4
gpt4 key购买 nike

我研究了 stackoverflow 并找到了我转换为 Swift 的解决方案,它似乎不起作用并且仍在执行选择器。

 func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
self.filter.searchTerm = self.searchBar.text

NSObject.cancelPreviousPerformRequestsWithTarget(self, selector: "getHints", object: nil)
NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "getHints", userInfo: nil, repeats: false)
}

有没有更好的方法来快速做到这一点?谢谢!

最佳答案

更新 2016/09/01:

我们可以使用 NSTimers 或(自 swift 2.0 起)NSObject 的 performSelector 和 friend 。

方法 1:performSelector

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool {
NSObject.cancelPreviousPerformRequests(
withTarget: self,
selector: #selector(ViewController.getHintsFromTextField),
object: textField)
self.perform(
#selector(ViewController.getHintsFromTextField),
with: textField,
afterDelay: 0.5)
return true
}

func getHintsFromTextField(textField: UITextField) {
print("Hints for textField: \(textField)")
}

方法二:NSTimer

var timer: NSTimer? = nil

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool {
timer?.invalidate()
timer = Timer.scheduledTimer(
timeInterval: 0.5,
target: self,
selector: #selector(ViewController.getHints),
userInfo: ["textField": textField],
repeats: false)
return true
}

func getHints(timer: Timer) {
var userInfo = timer.userInfo as! [String: UITextField]
print("Hints for textField: \(userInfo["textField"])")
}

请注意,我将 textField 传递给延迟函数。它并不总是必需的,但当 textField 不容易访问或处理各种文本字段时,它可以让您的生活更轻松。

NSTimer 方法与 performSelector 有何不同?

当您调用 performSelector 时,目标保留(在 swift 中,目标始终是 self)但是当您使用 NSTimer 目标不会保留。这意味着,如果您使用 NSTimer,则必须确保目标(在本例中为 self)在计时器触发时处于事件状态。否则会发生崩溃。

(顺便说一句:performSelector 在内部使用 NSTimer 😀)

如果您对 GCD 计时器感兴趣,这个要点是一个很好的起点: maicki/TimerWithGCD.md

关于ios - 检测用户何时停止/暂停在 Swift 中输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29762553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com