6

मेरे पास टेबलव्यू और सर्चबार के साथ एक अभिभावक वर्ग है जो टेबलव्यू नियंत्रक का उप-वर्ग है। SearchBar और searchdisplaycontroller के लिए प्रतिनिधि UISearchdisplaycontroller से विरासत में प्राप्त एक अलग वर्ग में सेट हैं। टेबलव्यू और सर्चबार के लिए डेटासोर्स और प्रतिनिधियों को इस वर्ग में अलग-अलग संभाला जाता है। कक्षाएं एआरसी के तहत हैं।खोज दृश्य को खारिज नहीं कर सकता

इसलिए, जब कोई उपयोगकर्ता खोज पर टैप करता है, तो इस श्रेणी में FilesListController (पैरेंट) कक्षा से नियंत्रण स्थानान्तरण होता है। अब, बटन को रद्द पर एक उपयोगकर्ता नल, searchbar प्रतिनिधि इस वर्ग अर्थात

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar 

में सेट करते हैं कहा जाता है, लेकिन पूर्ण स्क्रीन searchtableview नकारने के उद्देश्य को पूरा और parentviewcontroller को वापस नहीं करता है। हालांकि, अगर मैं खोज वर्ग में इस प्रतिनिधि को नहीं लिखता, तो यह ठीक से काम करता है।

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar 

इस तरह:: मैं xib में जाएगा और कॉलिंग searchbar प्रतिनिधियों की स्थापना की है

self.searchResultsTableView.delegate = self; 
self.searchResultsTableView.dataSource = self; 
[parentFileViewController.searchDisplayController setDelegate:self]; 

कहाँ मैं गलत हो रहा हूँ? अग्रिम में धन्यवाद।

+0

[self.searchDisplayController setActive: NO anima टेड: हाँ]; – jussi

+0

हे धन्यवाद @ जुसी .. यह काम करता है !!! लेकिन यह खुद से क्यों खारिज नहीं करता है? ऐसा लगता है कि हम searchviewcontroller को खारिज करने के लिए मजबूर कर रहे हैं। –

+0

क्योंकि कुछ नियंत्रक को भंग करने से पहले कुछ जानकारी स्टोर करना चाहते हैं। मैं इसे एक उत्तर के रूप में पोस्ट करूंगा। – jussi

उत्तर

13

प्रतिनिधि समारोह में प्रत्युत्तर इस्तीफा देने को लागू करना चाहिए यदि आप एक SearchBarController के साथ एक UISearchBar खारिज करने के लिए, बस इस कोड का उपयोग करना चाहते हैं:

[self.searchDisplayController setActive:NO animated:YES]; 
1

आप यानी

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar { 
     [searchBar resignFirstResponder]; 
} 
+0

यह केवल कीबोर्ड को खारिज कर देता है, लेकिन खोज दृश्य और रद्द बटन को खारिज नहीं करता है। –

+0

उस मामले में, जुसी सही है – cekisakurek

-1

मेमोरी चेतावनी दिखाई दे सकता है आवेदन चलाने के दौरान किसी भी समय, आपको लगता है कि एक स्मृति चेतावनी होगी और दृश्य और डिस्पोजेबल वस्तुओं को फिर से बनाया जाना होगा।

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 

if([self isViewLoaded] && self.view.window == nil) 
{ 
    self.view = nil; 
    keys = nil; 
    names = nil; 
    errorDuringNetworkCall = nil; 
} 
} 

और segue आपरेशन प्रदर्शन से पहले खोज पट्टी tableview नकारने के द्वारा:

हम अपने सरणियों शून्य करने के लिए सेट करके ऐसी स्थिति संभाल रहे हैं एक मेमोरी चेतावनी के बाद

[self performSegueWithIdentifier:@"navigateToNextScreen" sender:self]; 
self.searchBar.text = @""; 
[self.searchDisplayController setActive:NO animated:YES]; 

प्राप्त होता है viewDidLoad विधि को फिर से बुलाया जाता है और सरणी आबादी आती है, खोज बार उपयोगी रहेगा। मुद्दों के बिना कार्य

+0

मुझे यह सवाल बिल्कुल जवाब देने के रूप में नहीं दिख रहा है –

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