7

हे सब, मैं आईफोन विकास के लिए नया हूं और मैं पूरे यूआईएनएविगेशन नियंत्रक और यूआईटीएबीबार नियंत्रक विचार को समझ नहीं रहा हूं। क्या एक दूसरे के लिए एक विकल्प है - ट्वीटी जैसे ऐप्स दोनों कैसे गठबंधन करते हैं?एक ऐप में UITabBar और UINavigationController होने के बाद?

मैं चाहता हूं कि मेरे ऐप में लगातार एक बार टैब बार (जो काम करता प्रतीत होता है) है, लेकिन शीर्ष पर एक नेविगेशन बार भी है जो टैब बार को हटाए बिना स्क्रीन पर धक्का/पॉप दृश्य कर सकता है ।

  • मैं इसे कैसे पूरा कर सकता हूं?
  • इन सभी नियंत्रकों के संबंध में मेरे मेनविंडो.एक्सिब तक आईबी में पदानुक्रम कैसा दिखना चाहिए?
  • यहां सबसे अच्छा अभ्यास क्या है?

धन्यवाद बहुत बहुत,

+3

सीधे Tweetie सांकेतिक शब्दों में बदलनेवाला के मुंह से: http://stackoverflow.com/questions/576764/tab-bar-controller-inside-a-navigation -नियंत्रक-या-साझाकरण-ए-नेविगेशन-रूट-वी – chrissr

उत्तर

15

बस UINavigationController के अंदर दृश्य नियंत्रक को लपेटें और के अंदर UINavigationController रखें। यह आप के लिए कार्य करेंगे ...

उदाहरण:

NSMutableArray *tabBarViewControllers = [[NSMutableArray alloc] initWithCapacity:2]; 

tabBarController = [[UITabBarController alloc] init]; 
[tabBarController setDelegate:self]; 

UINavigationController *navigationController = nil; 
navigationController = [[UINavigationController alloc] initWithRootViewController:<Your View controller1>]; 
[tabBarViewControllers addObject:navigationController]; 
[navigationController release]; 
navigationController = nil; 

navigationController = [[UINavigationController alloc] initWithRootViewController:<Your View controller2>]; 
[tabBarViewControllers addObject:navigationController]; 
[navigationController release]; 
navigationController = nil; 

tabBarController = tabBarViewControllers; 
[tabBarViewControllers release]; 
tabBarViewControllers = nil; 
+0

यह अधिक समझ में आता है, प्रत्येक दृश्य नियंत्रक के पास पॉप/पुश दृश्यों पर अपना स्वयं का नेविगेशन नियंत्रक हो सकता है। धन्यवाद! – barfoon

+0

@ मंजुनथ: इस तरह, मैं दो अलग-अलग नामों के साथ navbar और टैब बार आइटम नामकरण में सफल नहीं हूं। क्या ऐसा करने के लिए कोई रास्ता है? – Sefran

3

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

- File's Owner   DescriptiveNameNavViewController 
- First Responder 
- View     UIVIew 
- Navigation Controller UINavigationController 
    - Navigation Bar  UINavigationBar 

ध्यान दें कि दृश्य में कुछ भी नहीं है। UIVavigationController UIView से जुड़ा हुआ है, जहां नीचे देखेंDidLoad देखें।

टैब के व्यू कंट्रोलर के लिए हेडर फ़ाइल में (जिसे मैंने यहां वर्णनात्मक नामनामवव कंट्रोलर कहा है - इसके लिए कोई विशेष मानक नहीं है, लेकिन मैं मुझे याद दिलाने के लिए [कुछ] NavViewController का उपयोग करता हूं कि यह व्यू कंट्रोलर के साथ एक नेविगेशन नियंत्रक है ।

@interface DescriptiveNameNavViewController : UIViewController { 
    UINavigationController *navigationController; 
} 
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 

@end 

नियंत्रक में: नेविगेशन ढेर यह इसे से जुड़े XIB में नेविगेशन नियंत्रक है कि मैं MainWindow.xib में सेट है कि जादूगर उत्पन्न नियंत्रक नाम) सेट अप एक UINavigationController * IBOutlet है DescriptiveNameNavViewController के लिए, ऐसा कुछ करें:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[self view] addSubview:[navigationController view]]; 
    DescriptiveNameController *aController = [[[DescriptiveNameController alloc ] initWithNibName:@"DescriptiveNameController" bundle:nil ] autorelease]; 
    aController.title = @"Descriptive Title"; 

// 
// app stuff goes here. 
// 

    [self.navigationController pushViewController:aController animated:YES]; 
    [self.navigationController setDelegate:self]; 
} 

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

DescriptiveNameNavViewController में, इस तरह UINavigationControllerDelegate तरीकों को लागू:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if ([viewController respondsToSelector:@selector(viewDidAppear:)]) { 
     [viewController viewDidAppear:animated]; 
    } 
} 

और उस कारण होगा संदेशों UINavigationController अंदर नियंत्रकों को प्रचारित करने के लिए की तरह आप उम्मीद करते हैं। ऐसा लगता है कि लोगों के सामने आने वाली कई समस्याएं हैं क्योंकि viewDidAppear: या ViewControllers पर अन्य विधियों को नेविगेशन नियंत्रक में धक्का नहीं दिया जा रहा है।

वैसे भी, मुझे बताएं कि क्या अधिक जानकारी मददगार होगी।

+0

मैंने इसका अनुसरण किया है और यह काम नहीं करता है। अभी भी एक वैचारिक स्तर पर नहीं मिल रहा है। जब मैं ऐप लॉन्च करता हूं और दूसरे टैब पर क्लिक करता हूं, तो यह केवल दृश्य लोड करता है, न कि एक नेविगेशन नियंत्रक के साथ। इसके अलावा, आप अपने शीर्षलेख में UINavigationControllerDelegate प्रोटोकॉल खो रहे हैं। नेविगेशन नियंत्रक इंटरफ़ेस में आईबीओटलेट के रूप में परिभाषित क्यों नहीं है, लेकिन संपत्ति विवरण में है? – barfoon

+0

@property कथन में केवल एक आईबीओटलेट है क्योंकि यह वह जगह है जहां इसे इंटरफ़ेस बिल्डर द्वारा उठाया जाता है। यह एक खाली मैक्रो है। यदि आपको दूसरे पैनल पर खाली दृश्य मिल रहा है, तो ऐसा इसलिए है क्योंकि नेविगेशन नियंत्रक को देखने में लोड करना DidLoad काम नहीं कर रहा है। किसी भी दर पर, यदि क्रिसिस का समाधान आपके लिए काम कर रहा है, तो केवल व्यूविल्ल * और viewDid * विधियों को अपने सबव्यूज़ में प्रचारित नहीं किया जा रहा है और यदि प्रतिनिधि को कार्यान्वित किया जाता है। (गायब प्रतिनिधि प्रोटोकॉल एक गलत तरीका था, लेकिन विधियों को वैसे भी बुलाया जाएगा।) – corprew

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