2011-03-13 86 views
2

我在我的应用程序中有一个UISearchBar。当用户键入任何术语时,将执行对外部API的动态搜索。我将整个搜索术语作为参数发送到API。UISearchBar创建延迟/取消

我的问题是,用户可以非常快速地输入。那么有没有什么办法可以代替向用户键入的每个字母对API进行请求,我们是否可以创建一个延迟,即如果输入2个连续信件是非常小的,即合并成一个单一的请求(而不是让2个独立的请求)

我目前使用

[NSObject cancelPreviousPerformRequestsWithTarget:self]; 
    [xmlParser performSelector:@selector(parseXMLFile:) withObject:url afterDelay:0.3]; 

但这只是形成延迟...我想parseXMLFile到不如果差异非常小(即用户类型非常快),则执行多次。

回答

0

使用NSTimer。例如,安排一个定时器(带有搜索回调)在0.5秒后触发,然后如果在定时器触发前出现新的搜索词,则使其失效并重新安排时间。

如果0.5内没有新的搜索,则计时器将触发并搜索。

+0

对不起,但以前没有用过NSTimer。请你提供代码,根据我上面用于延迟的内容。 – testndtv 2011-03-14 04:47:38

+0

如果你可以提供延迟和否组合的代码,它也会很好。的字符..沿着http://www.iphonedevsdk.com/forum/iphone-sdk-development/45440-nstimer-help-please.html – testndtv 2011-03-14 05:14:42

+0

行的东西看看三个20 searchdisplaycontroller的例子: https: //github.com/facebook/three20/blob/development/src/Three20UI/Sources/TTSearchDisplayController.m 看看kPauseInterval变量,还有 - (void)restartPauseTimer和 - (void)searchAfterPause方法。 – 2011-03-14 08:09:40