ऐसा करने के लिए एक मानक घटक है, जिसे UISearchDisplayController कहा जाता है।
यह आपको परिणाम प्रदर्शित करने के लिए UISearchBar
और UITableView
देता है। फिर आप अपनी आवश्यकताओं के अनुसार सामग्री दृश्य और तालिका दृश्य की उपस्थिति को कस्टमाइज़ कर सकते हैं।
ऐसे नियंत्रक द्वारा किए गए कार्यों पर नियंत्रण प्राप्त करने के लिए आपको UISearchDisplayDelegate प्रोटोकॉल के अनुरूप होना होगा।
मैं आपको example app पर ध्यान से देखने के लिए सुझाव देता हूं कि आप दस्तावेज़ पर पा सकते हैं।
संपादित
आदेश स्वतः पूर्ण सुविधाओं आप UISearchDisplayDelegate
प्रोटोकॉल के searchDisplayController:shouldReloadTableForSearchString
विधि लागू कर सकते हैं लागू करने के लिए। इसे उपयोगकर्ता द्वारा टाइप किए गए प्रत्येक चरित्र पर बुलाया जाएगा।
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
[self.geocoder geocodeAddressString:searchString completionHandler:^(NSArray *placemarks, NSError *error) {
self.placemarks = placemarks;
[self.searchDisplayController.searchResultsTableView reloadData];
}];
return NO;
}
हर इनपुट स्ट्रिंग:
मान लें कि आप एक CLGeocoder
संपत्ति geocoder
कहा जाता है कि और है कि आप एक NSArray
संपत्ति placemarks
कहा जाता है में स्थान-चिह्न पकड़े हुए हैं, आपके द्वारा एक जीवित स्वतः पूर्ण प्राप्त कर सकते हैं का एक उदाहरण है खोज परिवर्तन के लिए, आप इस स्ट्रिंग का उपयोग करके एक आगे जियोकोडिंग करते हैं। completionHandler
ब्लॉक में आप नए पाए गए प्लेसमार्क को अपनी placemarks
संपत्ति पर असाइन करें और तालिका को फिर से लोड करें।
कृपया यह न करें कि खोज असीमित है क्योंकि आप पूरा करने वाले हैंडलर में तालिका को पुनः लोड करने और प्रतिनिधि विधि में वापस नहीं लौटने की देखभाल करेंगे। वापस लौटने से पहले खोज खत्म हो जाने से पहले टेबल को फिर से लोड करने के लिए टेबल बनाया जाएगा, जो आप चाहते हैं कि व्यवहार नहीं है।
अंतिम टिप्पणी के रूप में, याद रखें कि मैंने जो कोड प्रदान किया है वह न्यूनतम है। एक वास्तविक दुनिया के ऐप में आप बेहतर ढंग से त्रुटियों का ख्याल रखेंगे जो geocoder चला सकता है, जैसे kCLErrorGeocodeFoundNoResult
, kCLErrorGeocodeFoundPartialResult
और kCLErrorGeocodeCanceled
, here दस्तावेज।
स्रोत
2012-12-28 06:00:42
यह चीजों के यूआई पक्ष के लिए बहुत अच्छा काम करता है। मेरे प्रश्न के दूसरे भाग पर कोई विचार, खोज परिणाम? मैं UISearchBar में टाइपिंग शुरू करने में सक्षम होना चाहता हूं और तालिका में संभावित स्थान दिखाना चाहता हूं (मैं ऐप्पल मैप्स का उपयोग कर रहा हूं)। –
@JamesWeir मेरे अपडेट किए गए उत्तर की जांच करें। –
ठीक है, सबकुछ अब काम कर रहा है, लेकिन परिणाम वह नहीं हैं जो मैं उम्मीद कर रहा था। CLGeocoder सबसे बड़ा परिणाम नहीं देता है। उदाहरण के लिए, ऊपर दिए गए स्क्रीनशॉट में "ऐप्पल" की खोज करने से सड़क के पते पर आधारित केवल 2 हिट पैदा होती हैं। ऐप्पल दस्तावेज़ों को देखते हुए वे उल्लेख करते हैं कि CLGeocoder का उपयोग करके अपने मुख्यालय को खोजने के लिए आपको '1 अनंत लूप, कूपर्टिनो, सीए' खोजना होगा।क्या नक्शा ऐप yeilds (जैसे उपरोक्त तस्वीर में) के प्रकार के खोज परिणाम प्राप्त करने का कोई तरीका नहीं है। लक्ष्य उपयोगकर्ता के लिए स्थान खोजना आसान बनाना था - सटीक पता जानकारी की आवश्यकता नहीं है। –