2012-09-05 13 views
5

के अनुसार एक व्यक्तिगत UINavigationController का उपयोग करना चाहिए, मैं कोड का उपयोग कर UINavigationController और UITabBarController को जोड़ सकता हूं, उदा।क्या मुझे <a href="https://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/CombiningViewControllers.html" rel="noreferrer">Apple</a> के अनुसार प्रति टैब बार

MyViewController1* vc1 = [[MyViewController1 alloc] init]; 
MyViewController2* vc2 = [[MyViewController2 alloc] init]; 
MyViewController3* vc3 = [[MyViewController3 alloc] init]; 

MyNavRootViewController* vc4 = [[MyNavRootViewController alloc] init]; 
UINavigationController* navController = [[UINavigationController alloc] 
         initWithRootViewController:vc4]; 

NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, vc3, navController, nil]; 
tabBarController.viewControllers = controllers; 

इस सेटअप में, केवल vc4UINavigationController है, लेकिन क्या अगर मैं VC1-vc3 चाहते भी UINavigationController है?, मैं की तरह करना चाहिए ..

MyViewController1* vc1 = [[MyViewController1 alloc] init]; 
UINavigationController* nv1 = [[UINavigationController alloc] 
         initWithRootViewController:vc1]; 

MyViewController1* vc2 = [[MyViewController2 alloc] init]; 
UINavigationController* nv2= [[UINavigationController alloc] 
         initWithRootViewController:vc2]; 

MyViewController1* vc3 = [[MyViewController3 alloc] init]; 
UINavigationController* nv3 = [[UINavigationController alloc] 
         initWithRootViewController:vc3]; 


NSArray* controllers = [NSArray arrayWithObjects:nv1, nv2, nv3, nil]; 
tabBarController.viewControllers = controllers; 

इस है सही दृष्टिकोण?

+0

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

+0

यदि आपको एक टैब में कई दृश्यों के माध्यम से नेविगेट करना है, तो आपको नेविगेशन नियंत्रक का उपयोग करने की आवश्यकता होगी। यदि आपके पास प्रति टैब दिखाने के लिए एकल व्यू कंट्रोलर है, तो नेविगेशन नियंत्रक का उपयोग न करें। यह सब आपकी आवश्यकता के आधार पर निर्भर करता है। –

उत्तर

1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 


// Override point for customization after application launch. 

self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 

self.tabBarController.viewControllers = [self initializeTabBarItems]; 
self.navigationController = [[UINavigationController alloc]init]; 
[self.navigationController setNavigationBarHidden:YES]; 
self.window.rootViewController = self.navigationController; 
[self.navigationController pushViewController:_tabBarController animated:YES]; 
[self.window makeKeyAndVisible]; 
return YES; 
} 
- (NSArray *)initializeTabBarItems 
{ 
NSArray * retval; 

/* Initialize view controllers */ 
UIViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease]; 
UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease]; 
UIViewController *viewController3 = [[[ThirdViewController alloc]initWithNibName:@"ThirdViewController" bundle:nil]autorelease]; 
UIViewController *viewController4 = [[[FourthViewController alloc] initWithNibName:@"FourthViewController" bundle:nil] autorelease]; 
UIViewController *viewController5 = [[[FivfthViewController alloc] initWithNibName:@"FivfthViewController" bundle:nil] autorelease]; 


/* Initialize navigation controllers */ 
UINavigationController * navigationController1 = [[UINavigationController alloc] initWithRootViewController:viewController1]; 
UINavigationController * navigationController2 = [[UINavigationController alloc] initWithRootViewController:viewController2]; 
UINavigationController * navigationController3 = [[UINavigationController alloc] initWithRootViewController:viewController3]; 
UINavigationController * navigationController4 = [[UINavigationController alloc] initWithRootViewController:viewController4]; 
UINavigationController * navigationController5 = [[UINavigationController alloc] initWithRootViewController:viewController5]; 

/* Release View Controllers */ 
[viewController1 release]; 
[viewController2 release]; 
[viewController3 release]; 
[viewController4 release]; 
[viewController5 release]; 

/* Stuff Navigation Controllers into return value */ 
retval = [NSArray arrayWithObjects:viewController1,viewController2,viewController3,viewController4,viewController5,nil]; 

/* Release Navigation Controllers */ 
[navigationController1 release]; 
[navigationController2 release]; 
[navigationController3 release]; 
[navigationController4 release]; 
[navigationController5 release]; 

return (retval); 
} 

आप इसे आज़मा सकते ....

+0

यह नहीं होना चाहिए: 'retval = [NSArray arrayWithObjects: नेविगेशन नियंत्रक 1, नेविगेशन नियंत्रक 2, नेविगेशन नियंत्रक 3, नेविगेशन नियंत्रक 4, नेविगेशन नियंत्रक 5, शून्य];' – viral

0

आप अपने TabBarController के टैब प्रति एक UINavigationController होना चाहिए। तो आपका दूसरा दृष्टिकोण सही है। मुझे नहीं लगता कि आप सभी टैब के लिए एक ही नेविगेशन नियंत्रक का पुन: उपयोग कर सकते हैं।

0

हाँ आपका दृष्टिकोण सही है।

यदि आपको टैब में दृश्यों को नेविगेट करना है तो उस टैब में नेविगेशन नियंत्रक होना चाहिए।

UINavigationController * navigationCtrl = [[UINavigationController alloc] initWithRootViewController:firstTabViewCtrl]; 
[arrTabs addObject:navigationCtrl]; 

या तो बुद्धिमान टैब के अंदर नेविगेशन नियंत्रक की कोई आवश्यकता नहीं है।

[arrTabs addObject:firstTabViewCtrl]; 
2

हाँ हॉवर्ड, आपका दृष्टिकोण ठीक है। Apple यह भी कहता है। UITabbarController के साथ UINavigationController के साथ काम करते समय मैं भी एक ही दृष्टिकोण का पालन करता हूं और यह मेरे लिए बहुत अच्छा काम करता है।

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

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