मैं स्विफ्ट में अपने मौजूदा कोड को स्वेन टैन के जवाब अनुकूलन करने में सक्षम था पाया जा सकता है। मेरे मामले में, मैं एक विधि को स्ट्रिंग भेज रहा हूं जो खोज परिणामों async लोड करता है। इसके अतिरिक्त, मैं UISearchBar का उपयोग नहीं कर रहा हूं बल्कि एक सादा पुराना UITextField का उपयोग नहीं कर रहा हूं।
func sendSearchRequest(text: String?) {
// Call async search method here...
}
तरीका है कि cancelPreviousPerformRequestsWithTarget
काम करता है आप एक ही लक्ष्य, चयनकर्ता उत्तीर्ण करने की आवश्यकता है, और उद्देश्य यह है कि performSelector
कॉल में क्रम में पारित किया गया था:
var currentTempQuery = ""
...
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if let t = textField.text {
let s: NSString = t
let newString = s.stringByReplacingCharactersInRange(range, withString: string).trim()
NSObject.cancelPreviousPerformRequestsWithTarget(self, selector:#selector(MyViewController.sendSearchRequest(_:)), object: currentTermQuery)
// Don't replace currentTermQuery until after the cancelPreviousPerformRequestWithTarget call
currentTermQuery = newString
performSelector(#selector(MyViewController.sendSearchRequest(_:)), withObject: newString, afterDelay: 1)
}
return true
}
यहाँ चयनकर्ता जाता है कि कहा जा रहा है पिछले अनुरोध को रद्द करने के लिए। मेरे कार्यान्वयन में, चूंकि मैं केवल एक स्ट्रिंग पास कर रहा हूं, इसलिए मुझे कॉल के बीच वर्तमान अनुरोध स्ट्रिंग को संरक्षित करने की आवश्यकता है ताकि मैं अनुरोध रद्द करने के लिए इसका संदर्भ दे सकूं।
परिणाम मेरे यूआईटीएक्स्टफाल्ड में अक्षरों को टाइप करने और हटाने के लिए काम करता है। केवल एक खोज प्रति प्रमुख खोज शब्द परिवर्तन भेजा जाता है।
जैसा कि मैंने कहा, जैसा कि स्वेन टैन ने पोस्ट किया लेकिन थोड़ा अलग उपयोग किया। उम्मीद है कि यह कुछ लोगों को मदद करता है।
एनएसटीमर की तुलना में अधिक सुरुचिपूर्ण समाधान, मुझे लगता है।रनलोप और उपयोगकर्ता इनपुट या अनुरोध के आधार पर समस्याएं हो सकती हैं, शायद? हम्म, अब टाइमर की तुलना में नहीं, हालांकि – RSully
अच्छा! यहां विस्तृत टिप्पणियों के साथ एक और उदाहरण दिया गया है: http://benedictcohen.co.uk/blog/archives/157 – ma11hew28
काम नहीं कर रहा है, चयनकर्ता बार-बार कॉल करता है भले ही हम रद्द कर रहे हों (स्विफ्ट 3) – Saif