2010-09-23 12 views
8

Apple documentation स्क्रीन के हिस्से को प्रबंधित करने के लिए व्यू कंट्रोलर का उपयोग करने के संबंध में निम्नलिखित चेतावनी देता है।ऐप्पल अपने नियंत्रकों को अन्य नियंत्रकों को कैसे बनाता है?

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

अब अजीब बात यह है कि ऐप्पल इस सलाह को तोड़ देता है। UITabBarController, UINavigationController, UISplitViewController सभी इस सलाह के खिलाफ जाते हैं। Apple forums पर कोई चर्चा है कि क्या आप इस सलाह को अनदेखा करते हैं तो क्या गलत हो सकता है।

मुझे यह करने के तरीके पर tutorial मिला, लेकिन विधि को overlapping the status bar के साथ कोई समस्या थी, जिसमें एक फिक्स था जो कि डोडी लग रहा था। अन्य प्रश्नों में solutions that appear kind of dodgy या advise against doing it है।

तो सवाल यह है कि ऐप्पल अपने नियंत्रकों के लिए किस विधि का उपयोग करता है?

+0

क्या आप संदर्भ में लिंक पोस्ट कर सकते हैं? स्क्रीन को भरने या भरने के बावजूद मैं हमेशा छोटे विचारों के लिए व्यू कंट्रोलर बनाता हूं। परिणाम और अच्छी प्रैक्टिस देखना चाहते हैं, कृपया लिंक पोस्ट करें। । । –

+0

@राज: मैंने अपने प्रश्न के शीर्ष पर एक लिंक जोड़ा – Casebash

उत्तर

4

वे यह भी कहते हैं कि ऑटोरेलीज पूल का उपयोग न करें, लेकिन autorelease उनके नमूने पूरे वक्तव्य हैं। व्यावहारिक क्या है के साथ चिपकाओ। शुद्धता शायद थोड़ा माध्यमिक होना चाहिए।

3

ऐप्पल ने UIKit लिखा, ताकि वे जो भी पसंद कर सकें।

वहाँ सामान हुड के नीचे हो रहा का एक बहुत है: {विल, क्या}

  • दृश्य {, दिखाई छुपाएं}
  • दृश्य घूर्णन (ओह, सिर दर्द)
  • UIViewControllerWrapperView, जो कभी कभी है UIViewController.view के अभिभावक। या कुछ और।
  • UIViewController.navigationController/tabBarController/parentViewController/modalViewController
  • पॉपओवर अजीब हैं। मुझे यकीन है कि वे कैसे में फिट नहीं कर रहा हूँ।

आप अपने खुद के विचारों को लिखने, तो आप शायद दूर UIViewController का उपयोग कर उन्हें को नियंत्रित करने के साथ प्राप्त कर सकते हैं, लेकिन सभी जादुई व्यवहार है कि UIKit के लिए देता है की उम्मीद नहीं है एक "उचित" दृश्य नियंत्रक।

संपादित करें: मुझे देर हो चुकी है तो शायद मुझे स्टैक ओवरव्लो नहीं होना चाहिए। मेरा वास्तव में कुछ ऐसा मतलब है:

यदि दृश्य को UIViewController द्वारा नियंत्रित किया जाता है, तो दृश्य नियंत्रक दृश्य नियंत्रक पदानुक्रम में मौजूद होना चाहिए (यानी presentModalViewController:animated: जैसे फ़ंक्शन)। यह UI बिट को जटिल बिट्स को संभालने की अनुमति देता है।

जब आप [fooSubview addSubview:viewController.view] जैसे कुछ उपयोग करते हैं, तो UIKit उन सभी चीजों को नहीं कर सकता है जो इसे करना है। viewController क्या रखता है? यदि कोई स्मृति चेतावनी है और fooSubview अनलोड हो जाता है तो क्या होता है?

यदि आप viewController.view.frame = (CGRect){{0,0},{320,480}} जैसे कुछ सेट करते हैं, तो आप भी परेशानी के लिए पूछ रहे हैं: UIViewController वर्तमान स्थिति/नेविगेशन/टैब/आदि बार के आधार पर फ्रेम सेट करता है।यह इसे फिर से सेट कर सकता है, या यह तय करने के लिए फ्रेम का उपयोग कर सकता है कि आप शीर्ष पर धक्का देने वाले दृश्य नियंत्रकों को कैसे रखना है (मैंने यह व्यवहार देखा है; यह गन्दा है)। यदि आप viewController.view.transform बदलते हैं, तो दृश्य रोटेशन पर अजीब चीजें हो सकती हैं, क्योंकि दृश्य परिवर्तन यह है कि UIViewController अभिविन्यास के लिए उपयोग करता है (स्टेटस बार के साथ और अन्य चीजों का ढेर)।

केवल एक अच्छी तरह से समर्थित अपवाद मैं के बारे में पता नहीं है:

[window addSubview:viewController.view]; 
[window makeKeyAndVisible]; 

(वास्तव में, आप viewController.view विंडो के अंदर एक पूर्ण विंडो दृश्य के अंदर छड़ी कर सकते हैं, मुझे यकीन है कि कैसे काम करता है नहीं कर रहा हूँ ।)

मुझे लगता है कि ओएस 4.0+ में आपको window.rootViewController = viewController सेट करना होगा।

+0

ऐप्पल के नियंत्रक किसी भी दृश्य के साथ काम करते हैं – Casebash

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