2009-08-10 16 views
7

मेरे पास एक यूआईटीएबीबार नियंत्रक है जो कई नियंत्रकों का प्रबंधन करता है (एसडीके 3.0 का उपयोग करके)। इनमें से एक तालिका दृश्य नियंत्रक है और मुझे UISearchDisplayController का उपयोग करके एक खोज क्षमता प्रदान करने की आवश्यकता है। मेरा पूरा कोड ऐप्पल टेबलशर्च उदाहरण पर आधारित है। हालांकि, टैब पर क्लिक करते समय, तालिका दृश्य नियंत्रक इसकी संबंधित सामग्री दिखा रहा है, लेकिन कोई खोजबार दिखाई नहीं देता है। मैंने यह सुनिश्चित करने के लिए आईबी में xib की जांच की है कि सभी आउटलेट ठीक तरह से सेट हैं, लेकिन इससे कोई फर्क नहीं पड़ता कि मैं स्वयं को कैसे कोशिश करता हूं। खोज DisplayController हमेशा शून्य होता है और खोज बार प्रकट नहीं होता है।UITabBar नियंत्रक के भीतर नियंत्रक से UISearchDisplayController का उपयोग कैसे करें?

प्रैक्टिस में मैंने टेबलशर्च उदाहरण से MainView.xib को दोहराया है और फ़ाइल के मालिक वर्ग को टैब के लिए सही नियंत्रक वर्ग पर सेट किया है। आउटलेट उदाहरण के रूप में मेनव्यू.एक्सिब के रूप में सेट हैं। क्या मुझे कोई महत्वपूर्ण कदम याद आ रहा है या कुछ गलत कर रहा है?

अग्रिम धन्यवाद।

उत्तर

1

ठीक है, मैंने पाया है कि इसे कैसे हल किया जाए। मेरे मामले में, समस्या इस तथ्य के कारण थी कि मैं UITabBarController के भीतर एम्बेडेड नियंत्रक का उपयोग अपने प्रबंधित टैब (यानी एक बच्चे के रूप में) में से एक के रूप में कर रहा था।

UITabBarController से नियंत्रक को हटाकर, फिर UITabigationController को UITabBarController में जोड़ना, और आखिरकार मेरे नियंत्रक को UINavigationController के बच्चे के रूप में डालने से पूरी तरह से समस्या हल हो गई।

मुझे समझ में नहीं आता कि ऐसा क्यों है (दस्तावेज़ीकरण में कोई संबंधित जानकारी नहीं है, जैसा अक्सर होता है); हालांकि, अब यह एक आकर्षण की तरह काम करता है। दयालु संबंधों के साथ ।

+0

यह अभी भी नवंबर 2017 के रूप में काम करता है। एक अच्छा चित्र है जो दिखा रहा है कि टैब पेज पर [यूएनएविगेशन कंट्रोलर] को कैसे जोड़ना है [https://stackoverflow.com/a/37357242/1359088)। –

1

मैं भी इस मुद्दे :(है यह स्वयं एक searchbar बनाता खोज पट्टी tableview के पीछे छिपा हुआ हो रही है?

@unforgiven, आप इस प्रयास किया ...?

searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
[self.tableView setTableHeaderView: searchBar]; 

और यह काम करता है। लेकिन मैं आईबी में कुछ बेवकूफ गलती कर रहा हूं कि मेरे कनेक्शन सही होने के बावजूद सर्चबार दिखाई नहीं देता है। :-(

अगर आपको उत्तर मिल जाता है तो इस पोस्ट को अपडेट करें ...

1

मैं ने वही समस्या

हल करने के लिए मैं unforgivens जवाब देने के लिए अपने मुख्य निब

1 में एक अतिरिक्त कदम करना था) बनाने के एक UITabController 2) तो मैं में एक UINavigational नियंत्रक बाहर घसीटा था टैब नियंत्रक 3) फिर एक UITableViewController को NavigationalController में बच्चे 4 के रूप में खींच लिया गया है) फिर इंस्पेक्टर में मेरा MyTableWithSearchBarViewController होने के लिए (3) कक्षा बदल दी गई - जांचें कि निब नाम सही है और इंस्पेक्टर में आवश्यक होने पर इसे बदलें अच्छी तरह से 5) मैं तो तालिका दृश्य को हटाना पड़ा जो स्वचालित रूप से चरण (3) में आईबी द्वारा बनाया गया है। उसके बाद ही खोज पट्टी शो सही ढंग से ...

तो चरण 3 में मैं मंच पर एक अलग नियंत्रक बाहर निकाल लिया है या tableView बचा यह केवल कभी मेज और नहीं खोज पट्टी

अजीब प्रदर्शित होता होगा

5

मेरे पास एक ही समस्या थी और इस समाधान पर ठोकर खाई ...

यदि आपके पास इंटरफ़ेस बिल्डर का उपयोग कर टैब बार या नेविगेशन नियंत्रक में घोंसला है तो आपको अपना टेबल व्यू कंट्रोलर (उदाहरण के लिए UISearchDisplayController) है, तो आपको "विशेषता निरीक्षक" विंडो में "निब नाम" सेट करने की आवश्यकता है।

निब नाम वह तालिका होगा जो तालिका दृश्य रखता है और इसमें नियंत्रक (उदाहरण के लिए UISearchDisplayController) फ़ाइल के मालिक के रूप में होता है।

1

टॉमट्रैज का सही जवाब है यदि आपकी निब फ़ाइल में UITableViewController है। लेकिन, यदि आप कोड में UITableViewController लोड कर रहे हैं - जैसे इसे UINavigationController के ढेर पर दबाकर - समाधान थोड़ा अलग है।

UITableViewController या subclass को प्रारंभ करते समय, आपको -initWithNibName का उपयोग करने की आवश्यकता है: बंडल: प्रारंभकर्ता का रूप और अपनी निब फ़ाइल का नाम निर्दिष्ट करें। वैकल्पिक रूप से, आप मानक -initWithStyle का उपयोग कर सकते हैं: प्रारंभकर्ता और दृश्य लोड होने से पहले मैन्युअल रूप से nibName प्रॉपर्टी सेट करें।

यदि दृश्य लोड होने पर nibName प्रॉपर्टी सेट नहीं होती है, तो UITableViewController सामान्य UIViewController nib लुकअप तर्क का उपयोग नहीं करेगा। यह इसके बजाय एक मानक UITableView लोड करेगा।

0

एक अन्य संभावित ठीक है कि मेरे लिए काम करता initWithNibName साथ UITableViewController init के लिए है: बंडल:

SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil]; 

घोंसला एक UINavigationController में UITableViewController से पहले एक UITabBarController में रख मेरे लिए समस्या ठीक नहीं होती है। ..

1

मैंने हाल ही में सीखा है कि मैं एनआईबी फाइलों को [[MyViewController alloc] initWithNibName:nil bundle:nil]; के साथ लोड कर सकता हूं जब एनआईबी फ़ाइल के वर्ग के समान नाम होता है (यानी MyViewController.xib)। यह पता चला है कि इस तरह से शुरू करने से 'UISearchBar and UISearchBarDisplayController` प्रदर्शित नहीं होता है। जब मैंने कक्षा के नाम को वास्तव में टाइप करके दृश्य नियंत्रक को प्रारंभ किया, तो मेरी खोज बार सही ढंग से दिखाई दी। मैंने शुरू में सोचा था कि यह देखने के लिए कुछ था कि मैं व्यू कंट्रोलर कैसे पेश कर रहा था लेकिन खुश था कि यह नहीं था।

PGWSearchViewController *searchVC = [[PGWSearchViewController alloc] initWithNibName:@"PGWSearchViewController" bundle:nil]; 

searchVC.modalPresentationStyle = UIModalPresentationFullScreen; 
searchVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 

[self presentViewController:searchVC animated:YES completion:^{ }]; 

यह आईओएस एसडीके 5.1 और एक्सकोड 4.3.1 का उपयोग कर रहा है।

+0

हां, अब एसडीके 5.1 के साथ चीजें बहुत बेहतर हैं। –