Adding TabBarController Software

I want to make a tab bar controller and navigation controller programmatically. My code still works when it shows the tab bar at the bottom, but OptionViewController says nothing (without a name) on the button on the second tab bar. The funny thing is, when I press a button without anything on it, a heading appears (and so its appearance), can someone explain to me what I'm doing wrong? I tried using the following code:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [self.window makeKeyAndVisible]; NSMutableArray *tabItems = [[NSMutableArray alloc] initWithCapacity:2]; DefaultViewController *dvc = [[DefaultViewController alloc] init]; UINavigationController *dvc_nc = [[UINavigationController alloc] initWithRootViewController:dvc]; [tabItems addObject:dvc_nc]; [dvc release]; [dvc_nc release]; OptionsViewController *ovc = [[OptionsViewController alloc] initWithStyle:UITableViewStyleGrouped]; UINavigationController *ovc_nc = [[UINavigationController alloc] initWithRootViewController:ovc]; [tabItems addObject:ovc_nc]; [ovc release]; [ovc_nc release]; UITabBarController *tbc = [[UITabBarController alloc] init]; tbc.viewControllers = tabItems; self.tabController = tbc; [tabItems release]; [tbc release]; [self.window addSubview:self.tabController.view]; return YES; } 
+6
source share
3 answers

You need to set the tabBarItem and the UINavigationController header, not its rootController.

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [self.window makeKeyAndVisible]; NSMutableArray *tabItems = [[NSMutableArray alloc] initWithCapacity:2]; DefaultViewController *dvc = [[DefaultViewController alloc] init]; UINavigationController *dvc_nc = [[UINavigationController alloc] initWithRootViewController:dvc]; dvc_nc.tabBarItem.title = @"Default"; dvc_nc.tabBarItem.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Default" ofType:@"png"]]; [tabItems addObject:dvc_nc]; [dvc release]; [dvc_nc release]; OptionsViewController *ovc = [[OptionsViewController alloc] initWithStyle:UITableViewStyleGrouped]; UINavigationController *ovc_nc = [[UINavigationController alloc] initWithRootViewController:ovc]; ovc_nc.tabBarItem.title = @"Option" ovc_nc.tabBarItem.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Optiomn" ofType:@"png"]]; [tabItems addObject:ovc_nc]; [ovc release]; [ovc_nc release]; UITabBarController *tbc = [[UITabBarController alloc] init]; tbc.viewControllers = tabItems; self.tabController = tbc; [tabItems release]; [tbc release]; [self.window addSubview:self.tabController.view]; return YES; } 
+10
source

I created the UITabbarController as a rooview application controller with the UINavigationController for the UIViewController.

here is another example: I used xibs for View controllers.

AppDelegate.m

I create a method name: setupAppHome

 #pragma mark - SETUP HOME -(void) setupAppHome{ NSLog(@"set up the nano home"); self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; if (_chatViewController == nil) { _chatViewController = [[ChatViewController alloc] initWithNibName:@"ChatViewController" bundle:nil]; chatNav = [[UINavigationController alloc] initWithRootViewController:_chatViewController]; chatNav.tabBarItem.title=@ "Chat"; chatNav.tabBarItem.image=[UIImage imageNamed:@"chat_icon.png"]; } if (_callController == nil) { _callController = [[CallViewController alloc] initWithNibName:@"CallViewController" bundle:nil]; callNav = [[UINavigationController alloc] initWithRootViewController:_callController]; callNav.tabBarItem.title=@ "Call"; callNav.tabBarItem.image=[UIImage imageNamed:@"call_icon.png"]; } if (_contanctsController == nil) { _contanctsController = [[ContactsViewController alloc] initWithNibName:@"ContactsViewController" bundle:nil]; conNav = [[UINavigationController alloc] initWithRootViewController:_contanctsController]; conNav.tabBarItem.title=@ "Contact"; conNav.tabBarItem.image=[UIImage imageNamed:@"contact_icon.png"]; } if (_settingController == nil) { _settingController = [[SettingViewController alloc] initWithNibName:@"SettingViewController" bundle:nil]; settingNav = [[UINavigationController alloc] initWithRootViewController:_settingController]; settingNav.tabBarItem.title=@ "Setting"; settingNav.tabBarItem.image=[UIImage imageNamed:@"setting_icon.png"]; } self.tabController = [[UITabBarController alloc] init]; NSMutableArray *controllers = [[NSMutableArray alloc] initWithCapacity:4]; [controllers addObject:chatNav]; [controllers addObject:callNav]; [controllers addObject:conNav]; [controllers addObject:settingNav]; self.tabController.viewControllers = controllers;//@[chatNav,callNav,conNav,settingNav]; self.tabController.selectedIndex=0; [self.window setRootViewController:self.tabController]; [self.window makeKeyAndVisible]; } 

It is sent to an Xcode 9 text file with iOS 11.

+3
source

If someone needs a SWIFT version. It worked for me. Thanks to @rckoenes for the objC answer I used to translate.

  window?.makeKeyAndVisible() let dvc = HomeViewController() let dvc_nc = UINavigationController(rootViewController: dvc) dvc_nc.tabBarItem.title = "Home" dvc_nc.tabBarItem.image = UIImage(named: "HomeIcon") controllers.append(dvc_nc) let ovc = ProfileViewController() let ovc_nc = UINavigationController(rootViewController: ovc) ovc_nc.tabBarItem.title = "Profile" ovc_nc.tabBarItem.image = UIImage(named: "ProfileIcon") controllers.append(ovc_nc) let tbc = UITabBarController() tbc.viewControllers = controllers window?.rootViewController = tbc UINavigationBar.appearance().tintColor = UIColor(red: 0.05, green: 0.47, blue: 0.91, alpha: 1.0) UINavigationBar.appearance().barTintColor = UIColor(red: 0.05, green: 0.47, blue: 0.91, alpha: 1.0) UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()] UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent 
0
source

Source: https://habr.com/ru/post/896710/


All Articles