2015-02-10 9 views
49

यह छोटा होना चाहिए, लेकिन मुझे नहीं पता कि आप कैसे UISearchController प्रोग्रामेटिक रूप से खारिज कर सकते हैं?आप UISearchController को कैसे खारिज करते हैं? (आईओएस 8 और फ़ॉलो करें)

ध्यान दें कि यह नया UISearchController (2014 में आईओएस 8 के साथ पेश किया गया है), UISearchDisplayController नहीं।

अब तक यहाँ मैं

// Dismiss the search tableview 
searchController.dismissViewControllerAnimated() 
// Clear the Search bar text 
searchController.active = false 

क्या मिल गया है लेकिन मैं अभी भी रद्द बटन है और यह छुटकारा नहीं मिल सकता है।

उत्तर

114

ठीक तो अधिक परीक्षण के बाद, पता चला है तुम सिर्फ सेट करने के लिए:

searchController.active = false 
// or swift 4+ 
searchController.isActive = false 

यह पहली बात मैंने कोशिश की है, लेकिन मैं UISearchControllerDelegate तरीकों जो काम नहीं किया में से एक में यह कहा जाता है (शायद चाहिए इसे dispatch_async के साथ बुलाया है (हल्बानो का जवाब इसकी पुष्टि करता है))।

वैसे भी, क्योंकि मुझे यह जवाब ऑनलाइन नहीं मिला, इसलिए मैं अपने स्वयं के प्रश्न का उत्तर दे रहा हूं, मुझे आशा है कि इससे किसी की मदद मिलेगी।

+1

यह वास्तव में काम करता है! आईडीक कैसे एक वैरिएबल को बदलता है वास्तव में यूआई रीड्रॉइंग को ट्रिगर करता है लेकिन यह – Bhargav

+1

@ खरगाव काम करता है सबसे अधिक संभावना है क्योंकि – Nycen

+1

पर कुछ केवीओ (मुख्य मूल्य निरीक्षण) चल रहा है इसके अलावा यह 'UISearchControllerDelegate''DDismissSearchController (searchController)' विधि को कॉल करता है। –

15

क्या आपको यह समस्या तब हुई जब आप किसी अन्य दृश्य को देखने के बाद खोज नियंत्रक को खारिज करने का प्रयास करते थे? मुझे भी इस समस्या का सामना करना पड़ा है। मुझे लगता है कि आपको लगता है कि इस पोस्ट UISearchController not dismissed when View is pushed अनुसार UISearchController प्रस्तुत करता है दृश्य नियंत्रक में

self.definesPresentationContext = true 

उपयोग करने के लिए चाहते हो सकता है। इससे मेरा काम बनता है।

9

मैं नेविगेशन बार पर मेरा एम्बेड एम्बेड कर रहा था। मेरे लिए काम करने वाला कोड था:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.searchController setActive:NO]; 
     self.navigationController.navigationBar.topItem.title = @"MYTITLE".uppercaseString; 
     self.navigationItem.titleView = nil; 
    }); 
} 

आशा है कि यह किसी की सहायता करे। self.dismissViewControllerAnimated (गलत, पूरा होने: शून्य)

ओपन संपर्क और प्रतिनिधि में बदलाव के बिना खोज को हटाने

+3

सटीक कोड नहीं था, लेकिन प्रेषण async ने मुझे सही दिशा में इंगित किया! – kennydust

+0

अच्छा! यूआई तत्वों को संभालने के लिए मुख्य धागा भी अनिवार्य है, शायद यह जादू था। – halbano

0

मैं सिर्फ लाइन में शामिल हैं इस समस्या को खोज और interactionController, के बाद हल का उपयोग कर किया था।

+0

समस्या यह है कि यह कुछ प्रतिनिधि कार्यों जैसे 'WillDismissSearchController' को ट्रिगर नहीं करेगा जो आवश्यक हो सकता है। – aasatt

0

स्विफ्ट 4+

searchController.isActive = false 
संबंधित मुद्दे