2009-12-16 7 views
6

के लिए वेब-जैसे टैब आईफोन पर वेब अनुप्रयोगों जैसे टैब को लागू करने के लिए सबसे अच्छा तरीका क्या है, नीचे स्क्रीनशॉट की तरह ("चेकइन-इन्फो-फ्रेंड्स" टैब देखें)? ये UIKit मानक लाइब्रेरी का हिस्सा नहीं हैं, लेकिन हाल ही में बहुत आम हैं।आईफोन

मैंने आईफोन के लिए काफी समय के विकास के अनुप्रयोगों को खर्च किया है, लेकिन उस तरह के नियंत्रण विकसित नहीं कर रहे हैं। यहां सबसे अच्छा तरीका क्या होगा:

  • प्रत्येक टैब सामग्री के लिए एक नया UIView बनाएं, और मुख्य दृश्य में तीन सबव्यूव सीधे जोड़ें?
  • केवल नए UIViews बनाएं जब उपयोगकर्ता प्रत्येक टैब पर क्लिक करता है?
  • सभी सामग्री को UIScrollView में रखें, और केवल पृष्ठ को बदलें क्योंकि उपयोगकर्ता प्रत्येक टैब पर क्लिक करता है?

शायद इसके लिए वहां खुले स्रोत नियंत्रण हैं? मुझे कुछ नहीं मिला।

alt text http://www.foursquaregame.com/foursquare-game-images/foursquare-game-mobile-app.jpg

उत्तर

3

एक ऐसी ही समस्या के लिए मेरे दृष्टिकोण सभी 4 (मेरे मामले में) टैब बार देखा गया है, लेकिन लेकिन मौजूदा टैब दृश्य सभी जारी करके didReceiveMemoryWarning पर प्रतिक्रिया के लिए किया गया था। (फिर, ज़ाहिर है, आपको यह सुनिश्चित करना होगा कि जब आप कोई नया टैब चुनते हैं, तो नया दृश्य बनाते हैं, तो यह नया दृश्य बनाते हैं।)

मैंने सोचा कि यह एक अच्छा समझौता था - एक त्वरित प्रतिक्रिया उपयोगकर्ता पहले (और मेरे मामले में मेमोरी पदचिह्न मेरे ऐप में इस बिंदु पर सबसे कम है), और फिर गोली मारने से बचने के लिए कम स्मृति की प्रतिक्रिया।

+0

तो आपके पास एक टैबव्यू कंट्रोलर होगा, लेकिन 4 विचार, प्रत्येक "कॉफी सोचें" और टैब (ऊपर की तस्वीर से) सहित प्रत्येक में? –

+0

आपके मामले में, मेरे पास 1 टैबव्यू कंट्रोलर होगा, "कॉफी सोचें" के साथ एक बेस व्यू और फिर स्क्रीन के निचले हिस्से के लिए 3 छोटे टैब दृश्य, प्रत्येक टैब के लिए एक। (यदि टैब दृश्य पूर्ण स्क्रीन नहीं हैं तो मेमोरी सेविंग।) –

+0

(हालांकि मेरे लिए यह निर्णय सरल था, क्योंकि मेरे प्रत्येक टैबव्यू में बस कुछ बटन हैं - इसलिए सभी टैब दृश्यों के लिए एक ही व्यू कंट्रोलर का उपयोग करना आसान है - तर्क सिर्फ सरल बटन क्रिया विधियां है।) –

1

मुझे लगता है कि माता-पिता के दृश्य में सबव्यू के लिए तीन UIView * संदर्भ हैं या नियंत्रक को देखते हैं, सभी प्रारंभिक रूप से शून्य हैं, फिर अन्य दृश्यों को छिपाने के लिए सबराउटिन होने के लिए यदि वे दिखाई दे रहे हैं और या तो निर्माण और दिखाते हैं या बस नया दृश्य दिखाएं। असाधारण स्मृति आवश्यकताओं को मानना ​​नहीं।

मैं इस तरह के एक छोटे परदे क्षेत्र भार के साथ लगता है/subview स्तर पर चिंताओं उतारना एक चिंता का विषय होने की संभावना नहीं है, लेकिन माता-पिता विचारों लोड करने के लिए/उतार जरूरत है, subviews सब (जाना चाहिए दोनों छिपा हुआ और उतार दिया हो), और पुनः लोड पर, loadView को स्टार्टअप पर अंतिम अनुच्छेद में वर्णित दिनचर्या को कॉल करना चाहिए।

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

क्या यह वही सही बिंदु है? क्या मुझे कुछ अतिरिक्त जानकारी याद आ रही है?

1

आप प्रत्येक टैब को निब और सबकुछ के साथ वास्तविक दृश्य नियंत्रक बना सकते हैं। एकमात्र पकड़ यह है कि आपको उन मानक व्यू कंट्रोलर कॉल पर आगे बढ़ना होगा जिन्हें आप प्राप्त करना चाहते हैं (ViewWillAppear, आदि) लेकिन यह कोडिंग को बहुत साफ करता है क्योंकि आप किसी भी अन्य दृश्य के लिए कोडिंग करते हैं (हालांकि एक छोटी जगह के लिए)।

आप प्रत्येक नियंत्रक को "दृश्य" संपत्ति को देखने के लिए कहते हैं, जिसे आप टैब के नीचे मौजूद कंटेनर व्यू के सबव्यूव के रूप में जोड़ते हैं।

1

यदि सभी तीन टेबल दृश्य हैं, तो आप एक UITableViewController का उपयोग कर दूर हो सकते हैं जो चयनित टैब के आधार पर सामग्री को बदलता है। अन्यथा मैं प्रत्येक सबव्यू का बैक अप लेने के लिए वास्तविक दृश्य नियंत्रकों का उपयोग करने की दूसरी केएचजी की टिप्पणी करता हूं।

टैब के लिए स्वयं UISegmentedControl subclassing पर विचार करें।

+0

उत्तर के लिए धन्यवाद, फ्रैंक। सभी विचार टेबल नहीं हैं, मुझे इसका उल्लेख करना चाहिए था। UISegmentedControl पर बढ़िया विचार। –

+0

हाय फ्रैंक, मैं यह नहीं समझ सका कि कैसे अपनी छवियों को आउटपुट करने के लिए UISegmentedControl को उपclass और ड्राइंग विधि को प्रतिस्थापित करना है .. क्या आपको कोई विचार होगा कि मुझे किस विधि को ओवरराइड करना चाहिए? –

+1

मेरे पास यूआई तत्वों के सबक्लासिंग के बहुत से (अच्छा, कोई भी) अनुभव नहीं है। आप 'drawRect' विधि को ओवरराइड कर सकते हैं, चौड़ाई को पकड़ने के लिए '[super widthForSegmentAtIndex]' का उपयोग करें और' [सुपर चयनित सेगमेंट इंडेक्स] 'को जानने के लिए कि कौन सा हाइलाइट करना है। आप सबव्यू पेड़ भी चला सकते हैं और खुद को आकर्षित करने के लिए किसी भी UILabels को बता सकते हैं। लेकिन मुझे यकीन नहीं है कि आप अनियंत्रित एपीआई अस्वीकृति क्षेत्र में आने से पहले कितनी दूर जा सकते हैं। –