2014-07-01 6 views
6

भेज रहा UISearchBar/UISearchDisplayController कि RKObjectManager का उपयोग करके दूरस्थ ElasticSearch सर्वर से परिणामों को हासिल करेगा के साथ एक सरल UITableView है। समस्या यह है कि यदि उपयोगकर्ता जल्दी से टाइप करता है या शब्द थोड़ा बड़ा अनुरोध विफल रहता है और कभी-कभी मुझे परिणाम नहीं मिलते हैं।iOS: रुको जब तक उपयोगकर्ता टाइपिंग खत्म और फिर अनुरोध

क्या का कोई विकल्प है जब तक कि उपयोगकर्ता ने टाइप करना बंद नहीं किया है और फिर प्रत्येक पत्र के प्रति अनुरोध भेजने के बजाय अनुरोध भेजें?

उत्तर

22

अनुरोध भेजने से पहले एक छोटे से देरी जोड़ें, और फिर उस देरी अनुरोध को रद्द उपयोगकर्ता

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [NSObject cancelPreviousPerformRequestsWithTarget:self]; 

    [self performSelector:@selector(sendSearchRequest) withObject:searchText afterDelay:0.1f]; 
} 

आप देरी समय समायोजित करना पड़ सकता टाइपिंग जारी रहा तो। बहुत लंबा है और उपयोगकर्ता एक देरी है कि वहाँ बहुत छोटा करने के लिए अपने ध्यान देने योग्य है और अब आप

+0

के लिए कोई विचार है कि तेज में लागू करने के लिए कैसे है? – Ram

+0

@ राम मैंने तेजी से प्रदर्शन में चयनकर्ता की कमी के लिए कामकाज के रूप में सुझाए गए उत्तरों का उपयोग किया है: http://stackoverflow.com/questions/24170282/swift-performselector-withobject-afterdelay – wattson12

+0

वाह धन्यवाद। मैं इस पोस्ट पर ठोकर खा रहा हूं लेकिन याद रखें कि मैं nstimer को अमान्य कर सकता हूं। धन्यवाद आवंटित – Ram

7

रूप में एक ही समस्या है इस तेज संस्करण

NSObject.cancelPreviousPerformRequestsWithTarget(self) 
self.performSelector("searchForText:", withObject: searchString, afterDelay: 0.5) 
+0

स्विफ्ट कोड के लिए धन्यवाद! – Steve

संबंधित मुद्दे