Il comportamento di default della classe UITabBarController è quello di aggiungere un TabBarItem More quando ci sono più di 5 item . Il more è uno speciale NavigationBarController con all’interno una UITableView e l’elenco degli item non visibili nella schermata principale (Fig. 1).
E’ possibile colorare la NavigationBar agendo direttamente su una proprietà specifica della classe UITabBarController all’interno del nostro AppDelegate.m in questo modo:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UIColor *c = [UIColor colorWithRed:(102.0/255.0) green:(153.0/255.0) blue:(51.0/255.0) alpha:1]; UINavigationController *nav = self.tabBarController.moreNavigationController; UINavigationBar *bar = nav.navigationBar; bar.tintColor = c; self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible]; return YES; }
A questo punto la NavigationBar risulta correttamente colorata (Fig. 2).
E se premiamo il tasto Edit? Beh il risultato la figura 3 non lascia scampo, un’altra NavigationBar con il colore standard!
Come fare? Con un trucchetto, prima bisogna impostare come UITabBarController delegate la classe AppDelegate in questo modo:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UIColor *c = [UIColor colorWithRed:(102.0/255.0) green:(153.0/255.0) blue:(51.0/255.0) alpha:1]; UINavigationController *nav = self.tabBarController.moreNavigationController; UINavigationBar *bar = nav.navigationBar; bar.tintColor = c; // impostare il delegate sul tabbarcontroller self.tabBarController.delegate = self; self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible]; return YES; }
e poi creare il metodo willBeginCustomizingViewControllers che verrà richiamato al momento opportuno:
- (void)tabBarController:(UITabBarController *)controller willBeginCustomizingViewControllers:(NSArray *)viewControllers { UIView *editView = [controller.view.subviews objectAtIndex:1]; UINavigationBar *modalNavBar = [editView.subviews objectAtIndex:0]; modalNavBar.tintColor = [UIColor colorWithRed:(102.0/255.0) green:(153.0/255.0) blue:(51.0/255.0) alpha:1]; editView.backgroundColor = [UIColor whiteColor]; }
Ed ecco alla fine il risultato voluto da ogni punto di vista.










