2016-01-27 9 views
8

करने के लिए फिल्टर बटन जोड़ें मैं एक UISearchController अंदर searchBar के बगल में "फिल्टर" या "प्रकार" बटन जोड़ना चाहते हैं। मैंने UIButton और searchbar को UIView में जोड़ने की कोशिश की है और इसे मेरे UITableView tableView.tableHeaderView के रूप में सेट करें यह काम नहीं करता है क्योंकि tableView.tableHeaderView नियंत्रक को खारिज करते समय UISearchBar पर वापस सेट हो जाता है। यहां एक उदाहरण दिया गया है कि मैं इसे कैसे देखना चाहता हूं: enter image description hereUISearchController

+0

वहाँ एक विशेष कारण है कि आप एक खोज नियंत्रक का उपयोग कर रहे है? क्या आप इसका उपयोग नहीं कर रहे हैं और तालिका दृश्य को सीधे फ़िल्टर कर रहे हैं? – Wain

+0

कारण पूरी तरह से ऑप्टिकल है। तो मैं – smnk

+0

के साथ ठीक हो जाऊंगा, मुझे और अधिक विशिष्ट होना चाहिए, आपके पास पहले से ही एक टेबल व्यू होना चाहिए, क्या आप इसे फ़िल्टर करने में खुश हैं या आप खोज परिणामों को प्रस्तुत करने के लिए विशेष रूप से अलग दृश्य का उपयोग कर रहे हैं/खोज नियंत्रक ओवरले क्षमता चाहते हैं? – Wain

उत्तर

0

मैं खोज नियंत्रक खो देता हूं, यह वास्तव में आपकी इच्छित सुविधाओं की पेशकश नहीं करता है और अतिरिक्त दृश्य/वीसी जिसे आपको आपूर्ति करने की आवश्यकता है जटिलता/कोड जोड़ता है दोहराव।

आपके मौजूदा तालिका दृश्य में आपके पास पहले से मौजूद सभी चीजें हैं, क्योंकि इसमें डेटा स्रोत है। यह या तो एक सरणी या एक एफआरसी है। यदि यह एक सरणी है तो आप अपनी फ़िल्टर की गई सामग्री के साथ सरणी की सामग्री को प्रतिस्थापित कर सकते हैं, और यदि यह एक एफआरसी है तो आप भविष्यवाणी बदल सकते हैं।

नोट: सरणी मामले में, 2 सरणी संदर्भ हैं, 1 जो आपके सभी unfiltered वस्तुओं को पकड़ने वाले सरणी को इंगित करता है और दूसरा जो प्रारंभ में उसी सरणी का संदर्भ है - दूसरा संदर्भ तालिका दृश्य को पॉप्युलेट करने के लिए उपयोग किया जाता है। फिर, जब आप फ़िल्टर करते हैं, तो आप केवल फ़िल्टर किए गए आइटम के साथ एक नई सरणी बनाते हैं और उस पर दूसरा संदर्भ इंगित करते हैं।

इसके बजाय खोज नियंत्रक प्रतिनिधि विधि आप खोज पट्टी प्रतिनिधि के तरीकों को लागू करने और उपयोग करने वाले को छानने को गति प्रदान और पुनर्स्थापित करने के लिए लागू करने की

अब आप खोज नियंत्रक आप भी तालिका दृश्य स्विच नहीं कर रहे हैं से छुटकारा मिल गया इसलिए आपको केवल 1 टीवी और 1 हैडर दृष्टिकोण है। अब हेडर व्यू को बदलने का कोई कारण नहीं है और सबकुछ बस काम करता है।

+0

मुझे वह चीज़ नहीं है जो आप समझ रहे हैं कि मैं क्या देख रहा हूं। मैं नहीं जानना चाहता कि तालिका को कैसे फ़िल्टर करना है, बल्कि खोज बार के बगल में एक फ़िल्टर बटन को प्रबंधित करने के लिए कैसे करें बटन (आदर्श खोज नियंत्रक में) – smnk

+1

यही कारण है कि मैंने खोज नियंत्रक को खोने के बारे में पूछा। आपके पास समस्या यह है कि खोज नियंत्रक एक अलग दृश्य प्रस्तुत करता है, इसलिए शीर्षलेख को अलग-अलग कॉन्फ़िगर किया गया है। आप दूसरे दृश्य पर बस एक और शीर्षलेख स्थापित करने में सक्षम होना चाहिए। मुझे लगता है कि खोज नियंत्रक केवल थोड़ा वास्तविक लाभ के लिए जटिलता जोड़ते हैं। यदि आपके पास केवल 1 दृश्य है तो आपके पास 1 हेडर है जो कॉन्फ़िगर करना आसान है और फोकस प्रबंधन भी सरल है। – Wain

3

मैंने कोशिश की रास्ते से बहुत searchbar अनुकूलित करने के लिए है, लेकिन कुछ भी नहीं है मुझ पर पिछले करने के लिए एक रास्ता मिल गया मदद की पूर्ण भरने आपकी आवश्यकता

let mysearchController = UISearchController(searchResultsController: nil) 
    mysearchController.searchBar.showsCancelButton = true 
    mysearchController.searchBar.barStyle = UIBarStyle.Black 
    for var subView1 in mysearchController.searchBar.subviews{ 
     for var subView2 in subView1.subviews{ 
      if subView2 .isKindOfClass(UIButton){ 
       let customizedCancelButton:UIButton = subView2 as! UIButton 
       customizedCancelButton.enabled = true 
       customizedCancelButton.setTitle("", forState: UIControlState.Normal) 
       let image1 = UIImage(named: "Sort") 
       customizedCancelButton.setBackgroundImage(image1, forState: UIControlState.Normal) 
       customizedCancelButton.addTarget(self, action: "sort", forControlEvents: UIControlEvents.TouchUpInside) 
      } 
     } 
    } 

कोड ऊपर ज्यादा समझने के लिए सरल है।

func sort(){ 
     print("sort button fired!!!") 
    } 

enter image description here

4
इसके बजाय UISearchBar को अनुकूलित और चीजें उलझी की

, आप इसे SearchBar बगल में अपने स्वयं के बटन जोड़कर सरल रख सकते हैं।

सेट नहीं शो रद्द का उपयोग कर

self.searchBar.showsCancelButton = true 

या

अचिह्नित शो SearchBar के लिए रद्द बटन विकल्प स्टोरीबोर्ड में

enter image description here

जोड़े SearchBar के लिए बटन विकल्प आपके स्वयं बटन बी eside SearchBar के रूप में नीचे

enter image description here

दिखाया और फिर उसके अनुसार उस में बटन को IBaction जोड़ सकते हैं और अपने कार्यों प्रदर्शन करते हैं।

इसके अलावा आदर्श मामले में, यह नहीं सिफ़ारिश लायक tableview के शीर्ष लेख में इस दृश्य डाल करने के लिए है। यह बेहतर होगा यदि यह तालिकादृश्य से ऊपर है और इसके बाद ऐप्पल भी है।

enter image description here

3

मैं कोड की कुछ लाइनों के साथ एक खोज फ़िल्टर बना सकते हैं। मुझे उम्मीद है यह मदद करेगा।

* मैंने फ़िल्टर आइकन लागू करने के लिए बुकमार्क बटन चुना है; क्योंकि मैं कस्टम कार्रवाई के लिए पहले ही रद्द बटन का उपयोग कर चुका हूं।

सबसे पहले, आपके पास बुकमार्क बटन क्लिक कार्रवाई को संभालने के लिए प्रतिनिधि खोजबार है। फिर आपको नीचे गुणों को सेट करना चाहिए। यदि आप कस्टम स्थिति देना चाहते हैं (डिफ़ॉल्ट स्थिति सही है), तो आपको PositionAdjustment सेट करने की आवश्यकता है।

searchController.searchBar.delegate = self 
searchController.searchBar.showsBookmarkButton = true 
searchController.searchBar.setImage(UIImage(named: "Sort.png"), for: .bookmark, state: .normal) 
// MARK: You may change position of bookmark button. 
//searchController.searchBar.setPositionAdjustment(UIOffset(horizontal: 0, vertical: 0), for: .bookmark) 

फिर, खोज VarBookmarkButtonClid फ़ंक्शन को अपने वीसी के अंदर ओवरराइड करें। आप इस विधि के अंदर क्लिक इवेंट को संभाल सकते हैं।

func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) { //showAlert, presentVC or whatever you want here }

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

if searchController.isActive { 
    searchController.searchBar.showsBookmarkButton = false 
} else { 
    searchController.searchBar.showsBookmarkButton = true 
} 

While searchController is not active

searchController is active

+0

ग्रेट सॉल्यूशन! धन्यवाद। – Alessign

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