13

1. कदम: एक नया UIViewController बनाएँ:
- Xcode -> नई फ़ाइल ... -> कोको टच कक्षा -> UIViewController
- नाम: MyViewControllerइंटरफेस बिल्डर के साथ नेविगेशन कंट्रोलर कैसे जोड़ें?

2. कदम: खींचें और लाइब्रेरी से एक "नेविगेशन नियंत्रक" (UINavigationController) ड्रॉप MyViewController.xib को

alt text

3.Step: मुझे यकीन है, मुझे नेविगेशन कंट्रोलर को सही तरीके से जोड़ने के लिए कुछ करना है, है ना?

4.Step:

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
NSLog(@"navContr: %@", myViewController.navigationController); 
[self.navigationController presentModalViewController: myViewController animated:YES]; 

परिणाम:: मॉडल संवाद के रूप में नए दृश्य नियंत्रक शुरू करने के लिए प्रयास करें "navContr: शून्य"

5.Step: आप देख सकते हैं नया मोडल व्यू (MyViewController), लेकिन कोई नेविगेशन नियंत्रक नहीं है और कोई UINavigationBar नहीं है।

आपकी मदद के लिए बहुत बहुत धन्यवाद!


अद्यतन 1:

6.Step: मैं के रूप में "रूट देखें नियंत्रक" एक नया UIViewController (ViewNavi2) सेट:
alt text

7.Step: मैं कक्षा MyViewController में IBOutlet UINavigationController *navigationController परिभाषित करता हूं और xib को कॉन्फ़िगर करता हूं: नेविगेशन नियंत्रक -> कनेक्शन -> संदर्भ आउटलेट

लेकिन मेरे नेविगेशन नियंत्रक अभी भी नहीं के बराबर :-(है

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
NSLog(@"navContr: %@", myViewController.navigationController); 
// -> "navContr: nil" 
+2

[यहां] (http://rdcworld-iphone.blogspot.in/2013/03/how-to-add-navigation-controller-in.html) नेविगेशन नियंत्रक – swiftBoy

उत्तर

15

मैं भी निब फ़ाइल में नेविगेशन नियंत्रक शामिल करना चाहता बुलाया मिलेगा, लेकिन एप्पल प्रलेखन कहा कि सभी था कि यह "इष्टतम नहीं है "वास्तव में यह बताने के बिना कि यह कैसे करना है। मैं चाहता था कि मेरा मुख्य टैब्ड विंडो प्रोग्रामिंग के रूप में नेविगेशन नियंत्रक को परिभाषित किए बिना ठेठ नेविगेशन नियंत्रण वाली एक मोडल विंडो को कॉल करे। मैं साझा करूंगा कि मैंने यह कैसे किया।

आपका कोड बहुत मेरा के समान था, के रूप में मैं भी MyViewController में एक IBOutlet UINavigationController *navigationController परिभाषित किया। इंटरफ़ेस बिल्डर से, मैं बस रूट दृश्य नियंत्रक में मेरे विचार में परिभाषित किया गया है और फ़ाइल के मालिक> उस दृश्य परिभाषा करने के लिए दृश्य सेट।

और अपने कोड की तरह ही, मैं अपने माता पिता के विंडो में निम्न किया:

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[self presentModalViewController:myViewController animated:YES]; 

(। मैं स्वयं पर presentModelViewController बोल रहा हूँ, मैं तुम क्यों self.navigationController था पता नहीं है) जब मैं इस परीक्षण किया है, परिणाम यह था कि मेरा विचार एनआईबी फ़ाइल से लोड किया गया था, लेकिन नेविगेशन बार गुम था। MyViewController में कोड की एक और लाइन तय यह:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self setView:myNavigationController.view]; 

} 

सभी मैं यहाँ कर रहा हूँ, myNavigationController.view है, जो सब कुछ है कि एनआईबी फाइल में परिभाषित किया गया था नेविगेशन नियंत्रक सहित, शामिल करने के लिए बात करने के लिए MyViewController का दृष्टिकोण स्थापित कर रही है।

+1

आपके महान उत्तर के लिए बहुत बहुत धन्यवाद! मुझे यकीन है कि इससे बहुत से लोगों की मदद मिलेगी! :-) @all: कृपया वोट दें – Manni

+0

@ हेनरी मैंने कुछ ऐसा करने की कोशिश की। इसने मुझे बहुत काम बचाया। धन्यवाद! – Besi

+0

बहुत सुंदर स्पष्टीकरण। धन्यवाद। –

0

अगले कोड आप किसी भी वैध वस्तु नहीं देंगे है। क्योंकि UIViewController only returns a navigation controller if the view controller is in its stack. This property is nil if a navigation controller cannot be found. आपका दृश्य नियंत्रक के navigationController संपत्ति नेविगेशन नियंत्रक के ढेर में नहीं है

NSLog(@"navContr: %@", myViewController.navigationController); 

कारण है। वैसे भी मुझे यकीन नहीं है कि क्या आप हमारे नेविगेशन नियंत्रक को सही ढंग से प्रारंभ करते हैं। कुछ दस्तावेज पढ़ें।

+0

जोड़ने के लिए सरल ट्यूटोरियल आपके लिए धन्यवाद मदद भी! यह seams, कि "दृश्य नियंत्रक अपने ढेर में नहीं है"। हां, मुझे लगता है कि मैंने अपने नेविगेशन नियंत्रक को सही ढंग से प्रारंभ नहीं किया है। लेकिन मैं इंटरफ़ेस बिल्डर में ऐसा कैसे कर सकता हूं? मैं अपना प्रश्न अपडेट करता हूं, कृपया "अपडेट 1" पर एक नज़र डालें। – Manni

+0

इसके अलावा, यदि आपका विचार एनएवी नियंत्रक ढेर में है लेकिन आप (ऑटो) इसे कहीं छोड़ दिया है, तो आपके पास नहीं होना चाहिए, self.navigationController शून्य हो सकता है। रवींद्र! – AndrewS

2

"नेविगेशन-आधारित एप्लिकेशन" के लिए एक्सकोड में टेम्पलेट को देखें। (नई परियोजना -> नेविगेशन-आधारित अनुप्रयोग) फिर इंटरफ़ेस बिल्डर में MainWindow.xib खोलें। हालांकि यह एक दृश्य नहीं है, इसे चरण 1 में बनाए गए व्यू कंट्रोलर के रूप में सोचें। फिर "रूट व्यू कंट्रोलर" देखें जो इंस्पेक्टर में संदर्भित है और देखें कि यह "रूट व्यू कंट्रोलर" से कैसे जुड़ा हुआ है पहचान निरीक्षक और विशेषता निरीक्षक में "रूट व्यू कंट्रोलर" कक्षा।

आप "रूटव्यू कंट्रोलर" के अपने संस्करण में अपनी नेविगेशन की जड़ पर प्रदर्शित सामग्री को रखना चाहते हैं। आम तौर पर, अगला प्रदर्शित किया गया नियंत्रक "DetailViewController" है।फिर, उदाहरण कोड के माध्यम से पढ़ें कि टेम्पलेट प्रदान करता है और आप देखेंगे कि उस पर कैसे शुरुआत करें। RootViewController.m का उदाहरण टेम्पलेट में didSelectRowAtIndexPath में टिप्पणी की कोड को देखो। DetailViewController के रूप में कार्य करने के लिए आपको अपना स्वयं का व्यू कंट्रोलर बनाना होगा।

उम्मीद है कि इस चीजें आप के लिए स्पष्ट होगा।

// आपकी टिप्पणी //
पर आधारित EDITS ऐप्पल दस्तावेज़ कहता है कि यदि आप अपने नेविगेशन नियंत्रकों को बनाने के लिए आईबी का उपयोग करना चाहते हैं तो आपको वास्तव में उन्हें अपने मेनविंडो.एक्सिब में रखना चाहिए। मैं इस तथ्य है कि आप अपने UIView वस्तु का एक subview के रूप navigationController नहीं हो सकता को संवारता था। क्या तुम कहाँ से शुरू कर दिया है आपको दिया है सकते हैं वहाँ से आपके विचार नियंत्रक करने के लिए एक नेविगेशन बार वस्तु जोड़ने और फिर को नियंत्रित करने के लिए चीजों को आईबी का प्रयोग है।

ऐप्पल प्रलेखन से "हालांकि आप अपनी मुख्य निब फ़ाइल (या किसी अन्य निब फ़ाइल) से स्टैंडअलोन या मोडली प्रस्तुत नेविगेशन नियंत्रकों को भी लोड कर सकते हैं, ऐसा करने से इष्टतम नहीं है। उन परिदृश्यों में, आमतौर पर बनाना आसान होता है उपयोग के बिंदु पर प्रोग्रामिक रूप से नेविगेशन नियंत्रक। "

// अधिक संपादन // एक्सकोड 4 में परियोजना टेम्पलेट को अब "मास्टर विवरण" प्रोजेक्ट कहा जाता है। ऐसा इसलिए है क्योंकि इसे आईपैड में स्प्लिट व्यू कंट्रोलर के रूप में स्थापित किया जाएगा लेकिन फिर भी आईफोन में एक नियमित नेविगेशन प्रोजेक्ट होगा। मैं कहाँ "RootViewController" का संदर्भ जवाब में, अब आप कुछ "MasterViewController"

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद! मैं नेविगेशन आधारित आवेदन सावधानीपूर्वक विश्लेषण करता हूं। हां, एक कामकाजी नेविगेशन नियंत्रक के साथ एक MainWindow.xib है। यह ऐपडिलेगेट से जुड़ा हुआ है, यह मेरे MyViewController में एकमात्र अंतर है। टेम्पलेट प्रोजेक्ट में, आप नहीं देख सकते कि मेनविंडो कैसे।xib प्रारंभ हो गया है और शायद मेरा कोड "MyViewController * myViewController = [[MyViewController alloc] initWithNibName: @" MyViewController "बंडल: nil];" गलत है। कृपया मेरे प्रश्न में "अद्यतन 1" देखें। – Manni

+0

ऐप्पल प्रलेखन से "हालांकि आप अपनी मुख्य निब फ़ाइल (या किसी अन्य निब फ़ाइल) से स्टैंडअलोन या मोडली प्रस्तुत नेविगेशन नियंत्रकों को भी लोड कर सकते हैं, ऐसा करने से इष्टतम नहीं है। उन परिदृश्यों में, नेविगेशन नियंत्रक को प्रोग्रामेटिक रूप से बनाना आसान होता है उपयोग के बिंदु पर। " – Walter

+0

हां, आप सही हैं, नेविगेशन नियंत्रक प्रोग्रामेटिक रूप से बनाना आसान होगा, लेकिन मुझे इंटरफेस बिल्डर के साथ ऐसा करना है। कारण आप यहां पा सकते हैं: http://stackoverflow.com/questions/4604647/how-to-create-an-uiviewcontroller-with-uinavigationcontroller-with-interface-buil क्या आपके पास अभी भी मेरे लिए कुछ विचार हैं? – Manni