2011-04-29 8 views
14

मेरे पास एक ऐसा एप्लिकेशन है जो एक्सकोड में "नेविगेशन-आधारित एप्लिकेशन" टेम्पलेट का उपयोग करता है।"नेविगेशन-आधारित एप्लिकेशन" में रूटव्यू कंट्रोलर को कैसे बदलें

अब मैं इसे बदलना चाहता हूं ताकि लोड करने वाला पहला दृश्य एक नियमित (कस्टम) UIView है, और यदि उपयोगकर्ता किसी विशेष बटन पर क्लिक करता है, तो मैं मूल रूटव्यू कंट्रोलर को नेविगेशन नियंत्रक पर धक्का देता हूं।

मैं समझता हूँ कि कहीं न कहीं, किसी ने मेरी RootViewController के साथ इस फोन कर रहा है:

- (id)initWithRootViewController:(UIViewController *)rootViewController 

मुझे पता है कि कैसे अपने नए वर्ग के साथ तर्क बदलना चाहते हैं। मुख्य अनुप्रयोग प्रतिनिधि मीटर फाइल के अंदर

उत्तर

23

होने के लिए असाइन करें यदि आप रूट vie को प्रतिस्थापित करना चाहते हैं डब्ल्यू अपने नेविगेशन ढेर के नियंत्रक आप के रूप में अपनी दृश्य नियंत्रक सरणी के पहले वस्तु की जगह ले सकता -

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]]; 

NewViewController *nvc = [[NewViewController alloc] init]; 
[viewControllers replaceObjectAtIndex:0 withObject:nvc]; 
[self.navigationController setViewControllers:viewControllers]; 
+0

यह एक दिलचस्प विचार है। मैं अब जो कर रहा हूं उससे बेहतर हूं, लेकिन ljkyser के जवाब में जादू के बारे में मेरी टिप्पणी देखें। – iter

+0

क्या आपने कभी यह कोशिश की है? आप एनएसएमयूटेबलएरे के साथ एनएसएआरएआरए नहीं डाले जा सकते हैं! आपको [self.navigationController.viewControllers mutableCopy] के साथ एक NSMutableArray बनाना होगा। – DreamOfMirrors

2

देखो और पाते हैं विधि

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

इसके अंदर इस

self.window.rootViewController = self.navigationController;

तरह की एक पंक्ति आप एक diffent दृश्य नियंत्रक का दृष्टांत कर सकते हो जाएगा वहां और इसे rootViewController

+0

यह वही है जो मैं कर रहा हूं। मैं देख रहा हूं कि स्टॉक 'didFinishLaunching' नेविगेशन नियंत्रक को तुरंत चालू नहीं करता है। मैं उत्सुक हूं कि कौन करता है और कहां, और मैं कैसे इंटरजेक्ट कर सकता हूं। आम तौर पर, जो मैं बचने की कोशिश कर रहा हूं वह दो बार काम कर रहा है (यानी तत्काल और तुरंत नेविगेशन नियंत्रक को छोड़ना)। असल में, मैं एक्सआईबी के पीछे के दृश्यों के जादू को समझने की कोशिश कर रहा हूं। – iter

+2

यह वास्तव में MainWindow.xib फ़ाइल में संग्रहीत है और मुझे विश्वास है कि वहां से आलसी लोड हो गया है। मुझे लगता है कि आप इंटरफ़ेस बिल्डर के माध्यम से उपयोग कर रहे डिफ़ॉल्ट को बदल सकते हैं, लेकिन मैंने पहले ऐसा नहीं किया है। हम लगभग हमेशा इंटरफ़ेस बिल्डर के बिना कोड से सबकुछ करते हैं, इसलिए हम इसे पूरी तरह से टालते हैं। – ljkyser

+0

हाँ, मैं लगभग हमेशा कोड से सबकुछ करता हूं। यह एक पुरानी परियोजना है - सीखने की अवस्था की विरासत। – iter

5

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

  • खुला प्रश्न में स्टोरीबोर्ड
  • कोई नया दृश्य नियंत्रक अपने स्टोरीबोर्ड में खींचकर जोड़े ऑब्जेक्ट्स सूची से (दाएं हाथ टूल बार नीचे)
  • नियंत्रण कुंजी को दबाए रखते हुए, अपने नए ताजा सफेद दृश्य में अपने नेविगेशन नियंत्रक (खाली और भूरे रंग के) के बीच से क्लिक करें और खींचें।
  • पॉपअप पर, चयन रिलेशन Segue: रूट देखें नियंत्रक (सामान्य धक्का/मोडल/कस्टम विकल्प नीचे होना चाहिए आप की संभावना पहले देखा है)

टाडा! प्रोग्रामेटिक सृजन के साथ अपना दिन बगैर अपने नए रूट व्यू कंट्रोलर का आनंद लें।

+0

सिर्फ इसलिए कि आप प्रोग्रामेटिक सृजन पसंद करते हैं, इसका मतलब यह नहीं है कि आपको इस उत्तर को कम करना चाहिए। यह ठीक काम करता है। – woody121

+4

लेकिन ओपी बटन क्लिक के बाद रूटव्यू कंट्रोलर को "प्रतिस्थापित" करने के बारे में पूछ रहा था, इसलिए यह सवाल का जवाब नहीं है। –

+0

@ woody121 यह stackoverflow पृष्ठ रूट दृश्य नियंत्रक को बदलने के लिए xcode/इंटरफ़ेस बिल्डर विधि के लिए शीर्ष Google खोज परिणाम था। आपका जवाब सही काम करता है, धन्यवाद! – tmr

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

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