【问题标题】:How to delay search while typing NSSearchField如何在输入 NSSearchField 时延迟搜索
【发布时间】:2016-12-02 12:40:50
【问题描述】:

我正在使用AppKit.NSSearchField,并且需要在用户输入时延迟搜索事件,例如在 2 秒后过滤数据。

我从界面生成器中添加了操作 - '结束编辑',但在键入时它被频繁调用。用户打字时有没有增加延迟时间的本地方法?

【问题讨论】:

  • 您可以使用计时器,它会在结束编辑时触发。然后在它用完时运行选择器搜索。像这样: let delay =2 // 以秒为单位的时间 NSTimer.scheduledTimerWithTimeInterval(delay, target: self, selector: #selector(search), userInfo: nil, repeats: false)
  • 感谢@Irfan 的回答所以,我应该添加自定义延迟,不能增加这个控件的延迟时间吗?
  • 我非常有信心是这种情况 - 正如其名称所暗示的“结束编辑”。否则它会被称为“延迟编辑结束”:)
  • c# 标签是干什么用的?您如何获得文本更改通知?不要使用 NSTimer。使用 dispatch_after。

标签: c# objective-c cocoa xamarin.mac nssearchfield


【解决方案1】:

您应该使用一种名为 debouncing 的技术。这个想法是在有点过期延迟之后从您的操作(您连接到“结束编辑”)内部执行一个方法。每次新按键都会重置计时器,该计时器具有固定的延迟。在用户继续输入之前,搜索不会执行。一旦他停下来,最后一个反跳计时器就会启动,您的搜索就会继续进行。

更多信息在这里: How can I debounce a method call?

【讨论】:

  • this.timer?.Invalidate (); this.timerDetails = NSTimer.CreateScheduledTimer (NSConstants.SearchDelaSec, (obj) => { FilterData (); });这是我的解决方案,但它有问题。没有按预期工作
  • @Nininea 您的代码稍作修正后,工作正常。我创建了一个延迟 1 秒的示例:github.com/emankovski/DebouncedSearch
猜你喜欢
  • 2013-02-24
  • 2018-05-30
  • 2011-12-12
  • 2018-08-02
  • 1970-01-01
  • 2023-03-17
  • 2020-08-17
  • 2021-05-20
相关资源
最近更新 更多