2009-07-02 11 views
25

मैं एक नेविगेशन-आधारित आईफोन ऐप लिख रहा हूं, और मैं टूलबार और नेविगेशन बार के बीच एक UITableView स्क्रॉलिंग के साथ, मेरी स्क्रीन के निचले हिस्से में एक UIToolBar डॉक करना चाहता हूं।UITableView में टूलबार जोड़ने का सही तरीका क्या है?

मैंने कुछ फ़ोरम देखे हैं जहां यह सुझाव दिया गया है कि इस दृश्य को संभालने वाला व्यू कंट्रोलर UITableViewController के बजाय मानक UIViewController होना चाहिए। दृश्य नियंत्रक को सभी मानक UIViewController ओवरराइड के अतिरिक्त UITableView प्रतिनिधि और डेटा स्रोत विधियों को लागू करना होगा। क्या (यदि कोई है) अंतर्निहित कार्यक्षमता क्या मुझे उपरोक्त प्रोटोकॉल के अलावा इस दृश्य नियंत्रक उपclass में पुन: बनाने की आवश्यकता है ताकि यह UITableViewController की तरह कार्य कर सके? क्या इस मार्ग पर जाकर मैं कुछ खो रहा हूं?

या मानक UIViewController के अंदर UITableViewController घोंसला करना बेहतर होगा?

उत्तर

49

OS 3.0 नेविगेशन नियंत्रक के रूप में एक टूल बार में बनाया गया है तो उसे प्रदर्शित करने के लिए:।

[self.navigationController setToolbarHidden:NO]; 

implmenting द्वारा:

- (void)setToolbarItems:(NSArray *)toolbarItems animated:(BOOL)animated 
आपके विचार नियंत्रक में

, आप आइटम कॉन्फ़िगर कर सकते हैं टूल बार का।

तो अब आपको चिंता करने की ज़रूरत नहीं है कि उपकरण पट्टी आपके पदानुक्रम में कहां स्थित है।

(सुधारा टाइपो)

2

आपको केवल आवश्यकता है तालिका दृश्य कार्यक्षमता के स्तर के लिए आवश्यक UITableViewDelegate और UITableViewDatasource विधियों को लागू करने की आवश्यकता है। ये विधियां किसी भी वर्ग (एसएस) में हो सकती हैं हालांकि कहा गया है कि कक्षाओं को प्रासंगिक प्रोटोकॉल के अनुरूप होना चाहिए। प्रतिनिधि और डेटासोर्स UITableView उदाहरण पर सेट किया जाना चाहिए - या तो प्रोग्रामेटिक रूप से या इंटरफ़ेस बिल्डर के साथ। डॉक्स के मुताबिक कुछ कार्यक्षमता खो देंगे - overview section देखें।

व्यक्तिगत रूप से मुझे लगता है कि कई डेवलपर्स एक ही मोनोलिथिक व्यू कंट्रोलर क्लास में इस कार्यक्षमता को प्रदान करने के साथ भ्रमित प्रतीत होते हैं, और क्योंकि उनके पास उनके दृश्य में एक टेबल व्यू है, तो UITableViewController का उप-वर्ग उपयोग किया जाना चाहिए। हालांकि, मुझे Single Responsibility Principle पर विचार करना पसंद है और जब जटिलता सरल के अलावा कुछ भी होती है तो अक्सर डेटासोर्स तोड़ती है और अलग-अलग वर्गों में प्रतिनिधि बनती है। कोड तब भी एक विशिष्ट UIViewController कार्यान्वयन से बंधे नहीं है।

ऐसी परिस्थितियों में जहां मेरे पास अलग डेटासोर्स/प्रतिनिधि वर्ग हैं, मैं अक्सर इंटरफ़ेस बिल्डर का उपयोग करके तालिका दृश्य में उनका निर्माण और तार करता हूं, कोड में नहीं। यह दृष्टिकोण (कम से कम मेरे लिए) Dependency Injection की भावना में है और कुछ बॉयलर प्लेट कोड लिखता है, और कुछ स्तर decoupling प्रदान करता है।

पाठ्यक्रम के ये विकल्प उस कार्यक्षमता की जटिलता से प्रभावित हैं जो आप प्राप्त करने की कोशिश कर रहे हैं - सरल कार्यान्वयन के लिए मैं खुद को UITableViewController का उपयोग कर सकता हूं।

9

कोरी फ्लोयड

[self.navigationController setToolbarHidden:NO]; 

यही है, "बी" "setToolbarHidden" में होना चाहिए, ज्यादातर सही है, सिवाय इसके कि

[self.navigationController setToolBarHidden:NO]; 

लोअरकेस होना चाहिए । इसके अलावा, विधि iPhone OS Reference में सूचीबद्ध नाम वास्तव में है

- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated 

ऐसा लगता है कि हालांकि animated पैरामीटर को छोड़ते हुए भी काम करता है।

+0

ओह, ठीक किया गया। –

0

इस आजमाएं:

self.navigationController.toolbarHidden = NO; 

आशा है कि यह आप में मदद करता है।

7
//Tool bar 
[self.navigationController setToolbarHidden:NO]; 

UIBarButtonItem *buttonItem = [[ UIBarButtonItem alloc ] initWithTitle: @"Select All" 
               style: UIBarButtonItemStyleBordered 
               target: self 
               action: @selector(selectAll:) ]; 
UIBarButtonItem *buttonNext = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(goNext:)]; 
self.toolbarItems = [ NSArray arrayWithObjects: buttonItem, buttonNext, nil ]; 

[ buttonItem release ]; 
[buttonNext release]; 
संबंधित मुद्दे