5

मेरा ऐप एक UISearchDisplayController का उपयोग करता है। उपयोगकर्ता एक खोज पद में प्रवेश किया है जब मैं यह searchbar तक दिखाई दे करना चाहते हैं। यह काम करता है उपयोगकर्ता का मिलान परिणामों में से एक चुनता है, लेकिन उपयोगकर्ता नहीं 'खोज' बटन पर क्लिक करता है, तो यदि।खोज पद दृश्यमान रखें जब UISearchDisplayController निष्क्रिय

यह काम करता है:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     NSString *selectedMatch = [self.searchMatches objectAtIndex:indexPath.row]; 
     [self.searchDisplayController setActive:NO animated:YES]; 
     [self.searchDisplayController.searchBar setText:selectedMatch]; 

     return; 
    } 
    ... 

लेकिन अगर मैं -searchBarSearchButtonClicked: में ऐसा ही करते पाठ searchbar में नहीं रहता। इस स्थिति में मैं इसे कैसे पूरा कर सकता हूं इस पर कोई विचार?

संबंधित, अगर मैं सर्चबार का टेक्स्ट सेट करता हूं (लेकिन UISearchDisplayController निष्क्रिय) छोड़ देता है तो यह SearchResultsTableView का प्रदर्शन ट्रिगर करता है। मैं केवल यह दिखाना चाहता हूं कि जब उपयोगकर्ता खोजबार पर टैप करता है।

संपादित करें: किसी भी समय searchResultsTableView दिखाए बिना एक searchbar का पाठ सेट करने के लिए एक समाधान मिल गया:

// This hacky YES NO is to keep results table view hidden (animation required) when setting search bar text 
[self.searchDisplayController setActive:YES animated:YES]; 
[self.searchDisplayController setActive:NO animated:YES]; 
self.searchDisplayController.searchBar.text = @"text to show"; 

बेहतर सुझाव अभी भी स्वागत किया!

उत्तर

7

वास्तव में आप searchBarSearchButtonClicked विधि के अंदर एक ही कोड का उपयोग नहीं कर सकते हैं क्योंकि आप अपने searchMatches सरणी में सही तत्व का चयन करने के लिए कोई indexPath है।

यदि उपयोगकर्ता खोज बटन पर क्लिक करता है और आप खोज को छिपाना चाहते हैं तो नियंत्रक इंटरफ़ेस आपको यह पता लगाना होगा कि खोज के अंदर कौन सा टेक्स्ट डालना है (उदाहरण के लिए सूची में सबसे अच्छा मिलान परिणाम चुनना)।

यह उदाहरण केवल खोज पद दिखाई और अपरिवर्तित ही रहेंगे करते हैं, जब उपयोगकर्ता खोज बटन क्लिक करता है:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    NSString *str = searchBar.text; 
    [self.searchController setActive:NO animated:YES]; 
    self.searchController.searchBar.text = str; 
} 

आशा इस मदद करता है, विन्सेंट

+0

आह धन्यवाद! मैं 'कर रहा था [self.searchController setActive: नहीं एनिमेटेड: हाँ]; self.searchController.searchBar.text = searchBar.text; 'लेकिन स्पष्ट रूप से' searchBar.text' अब और नहीं है जो मैंने सोचा था कि यह खोज बार खाली करने के लिए 'setActive' विधि' के कारण था। –

3

रीसेट किया जा रहा मैन्युअल रूप से खोज पट्टी में स्ट्रिंग कुछ चलाता है UISearchDisplayDelegate विधियों के दोबारा। यह ऐसा कुछ है जिसे आप शायद नहीं चाहते हैं, इस मामले में।

मैं संशोधित करेगा vdaubry एक सा जवाब देने के लिए, और यह मुझे देता है:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    NSString *str = searchBar.text; 
    [self.searchController setActive:NO animated:YES]; 
    self.searchController.delegate = nil; 
    self.searchController.searchBar.text = str; 
    self.searchController.delegate = self //or put your delegate here if it's not self! 
} 
संबंधित मुद्दे