2011-03-09 11 views
49

मैं के रूप में विरोध किया आवेदन प्रतिनिधिself.window.rootViewController बनाम खिड़की addSubview

- (void)applicationDidFinishLaunching:(UIApplication *)application

है

[window addSubview: someController.view]; (1)

में iPhone क्षुधा के लिए उदाहरण के एक बहुत ध्यान दिया है

self.window.rootViewController = self.someController; (2)

क्या एक दूसरे का उपयोग करने का कोई व्यावहारिक कारण है? क्या तकनीकी रूप से सही है? नियंत्रक करो की संख्या (2) के लिए एक बराबर आदेश की तरह

self.someController.rootController = self.someOtherController; // pseudocode

उत्तर

48

UIWindowrootViewController संपत्ति iOS4 के साथ नए है।

पुरानी तकनीक addSubview का उपयोग करना था।

नई, अनुशंसित तकनीक rootViewController सेट करना है।

+7

addSubview पर rootViewController को क्यों सेट करने की आवश्यकता है इसके कुछ कारण क्या हैं? – pepsi

+1

@pepsi मैं आपको बता सकता हूं कि यह आईओएस 5.0 पर बहुत अधिक समझ में आता है, यह एनडीए के तहत है, इसलिए हम यहां चर्चा नहीं कर सकते हैं, देव मंचों पर पूछ सकते हैं और आपको यह मिल जाएगा, इसे व्यू कंट्रोलर रोकथाम के साथ करना है। – Zebs

+1

एक तर्कसंगत लाभ यह है कि एक संपत्ति के रूप में, आप इसे एसोसिएशन करने के लिए कोड लिखने के बजाय आईबी में सेट कर सकते हैं। – TomSwift

-1

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

-setRootViewController आईओएस 4.0 से पहले मौजूद नहीं है।

[self.window addSubview:self.tabBarController.view]; का उपयोग करें।

या, अपने लक्ष्य प्लेट को 4.0.2 या बाद में अपडेट करें। यह शायद 5% से कम उपयोगकर्ताओं का है जो इस बिंदु पर आईओएस 4 का उपयोग नहीं कर रहे हैं।

5

मैं इस कोड का उपयोग करें:

rootViewController_ = [[RootViewController alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    window_ = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    if ([window_ respondsToSelector:@selector(setRootViewController:)]) { // >= ios4.0 
     [window_ setRootViewController:rootViewController_]; 
    } else { // < ios4.0 
     [window_ addSubview:rootViewController_.view]; 
    } 
1

मेरे राय:

self.window.rootViewController स्थिति पट्टी ऊंचाई के अनुसार rootViewController.view आकार परिवर्तन

लेकिन अगर आप addSubview का उपयोग ऐसा नहीं होगा

उदाहरण के लिए, यदि आप एक नेविगेशन नियंत्रक को रूटव्यू कंट्रोलर सेट करते हैं, नेविगेशनकॉन्ट रोलर होगा (0,0,320,480);

लेकिन यदि आप एक सामान्य UIViewController, पर रूटव्यू कंट्रोलर सेट करते हैं तो नेविगेशन नियंत्रक (0,0,320,460) होगा;

अगर आप addSubview का उपयोग करें: दो viewcontrollers होगा (0,0,320,480)

और अगर वहाँ एक इन-कॉल-StatusBar है। यह भी आप के लिए बदलने के लिए जब आप का उपयोग setRoot ... अगर आप addSubview का उपयोग करें, subview आकार

इस पर के रिलीज के साथ नहीं बदलेगा अलग दृष्टिकोण सीमा रंग के साथ कुछ परीक्षण करना

+0

हाँ यह मेरी मदद करता है .... –

+0

समझ में आता है ...... –

10

बस एक अद्यतन आईओएस 6।

यदि अभी भी - [UIWindow addubview:] बॉयलरप्लेट का उपयोग कर रहे हैं, तो आपको शायद आपके कंसोल में "एप्लिकेशन लॉन्च के अंत में रूट व्यू कंट्रोलर होने की उम्मीद है" संदेश प्राप्त होगा। अपने ऐप में संभावित रोटेशन मुद्दों और लेआउट मुद्दों के साथ।

ऊपर की विंडो की रूटव्यू कंट्रोलर सेट करना भी इसे ठीक करेगा।

+0

हाँ, मेरा विचार गलत अभिविन्यास में दिखाई दे रहा था, भले ही व्यू कंट्रोलर ने नए आईओएस 6 रोटेशन एपिस का उपयोग किया ... जब तक मैंने इसे ठीक नहीं किया! भगवान के लिए – mattorb

+0

! मेरे पास यह संदेश सप्ताहों के लिए है और अब तक उचित समाधान नहीं मिला है जब तक कि मैं इसकी खोज नहीं कर रहा था! धन्यवाद – SpaceDog

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