2011-03-13 84 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