2012-01-06 3 views
4

Je souhaite utiliser un UITabBarSystemItem pour l'icône de l'un de mes tabBarItem, mais j'utilise des storyboards. Je ne suis pas sûr où l'installer. Si je le mets dans viewDidLoad de la vue, il ne change pas tant que vous n'appuyez pas sur le bouton dans le tabBar. Avant que ce soit juste le bleu? carré. Et autant que je sache, vous ne pouvez pas utiliser UITabBarSystemItems dans l'inspecteur de l'IB.Définir par programme les icônes UITabBarItem avec StoryBoards?

MISE À JOUR:

Eh bien d'abord de tout ce que je suis un idiot. Vous pouvez totalement choisir l'icône dans l'IB Inspector.

Elément de barre d'onglets -> Identifiant -> Choisissez votre icône.

Mais la question reste toujours comment le faire par programme. Ou plutôt quand/où?

+0

Vous n'êtes pas le seul idiot :-). Merci de l'avoir signalé à un autre, imbécile. –

Répondre

2

En supposant que la scène initiale de votre storyboard est le contrôleur de vue de la barre d'onglets, vous pouvez y accéder dans applicationDidFinishLaunching, il s'agit du rootViewController du window du délégué de l'application. Je ne sais pas si vous pouvez échanger un élément du système si l'élément de la barre est déjà présent, mais vous pouvez certainement définir l'image et le titre.

7

Vérifiez ce code pour votre problème: Son fonctionnement dans mon application.

- (NSArray *) initializeViewControllers 
{ 
    NSArray *viewControllerArray = nil; 
    viewController1 = <View Init Code> 
    viewController2 = <View Init Code> 
    viewController3 = <View Init Code> 

    1stNavController = [[UINavigationController alloc] initWithRootViewController:viewController1]; 
    UIImage *img = [UIImage imageNamed:@"tab_home"]; 
    [1stNavController .tabBarItem initWithTitle:@"Home" image:img tag:1]; 

    2ndNavController = [[UINavigationController alloc] initWithRootViewController:viewController2]; 
    img = [UIImage imageNamed:@"tab_timeDrop"]; 
    [2ndNavController .tabBarItem initWithTitle:@"Time Entry" image:img tag:2]; 

    3rdNavController = [[UINavigationController alloc] initWithRootViewController:viewController3]; 

    img = [UIImage imageNamed:@"tab_invoiceSummary"]; 
    [3rdNavController.tabBarItem initWithTitle:@"Invoice Summary" image:img tag:3]; 

    viewControllerArray = [NSArray arrayWithObjects:1stNavController,2ndEntryNavController,3rdReportNavController, nil]; 
    return viewControllerArray; 
} 

Ce code renvoie les contrôleurs de vue avec des images pour leurs onglets respectifs. Ici j'ai utilisé le contrôleur de navigation dans le contrôleur de tabulation. Vous pouvez également utiliser le contrôleur de vue au lieu du contrôleur de navigation.

il suffit d'ajouter ce code et initialiser votre contrôleur TabBar comme suit à l'intérieur appdidfinishlaunching méthode:

tabbarController = [[UITabBarController alloc] init]; 

_tabbarController.viewControllers = [self initializeViewControllers]; 

self.window.rootViewController = tabbarController; 

espérons que cela fonctionne.

Veuillez répondre.

+1

Ce code est correct, * SI * vous créez les ViewControllers et vous les faites vous-même. Mais la question concerne les Storyboards, donc cette réponse n'est pas liée à la question. –

11

Lorsque vous utilisez storyboards, un contrôleur de vue initialise avec le constructeur initWithCoder pour que vous puissiez passer outre cette fonction et définir l'icône de l'élément du système, comme autant

- (id)initWithCoder:(NSCoder*)aDecoder 
{ 
    if(self = [super initWithCoder:aDecoder]) 
    { 
     self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:1]; 
    } 
    return self; 
} 

Naturellement, vous pouvez modifier la valeur de l'élément du système l'une des valeurs prises en charge. Apple les énumère here

3

Eh bien, c'est assez simple!

Pour le cas où -> créez un TabBarController personnalisé (par exemple WBTabBarController). Dans votre StoryBoard, définissez-le explicitement. Pour le how -> il suffit d'écraser viewDidLoad du WBTabBarController et de définir vos images pour les TabBarItems. Dans l'exemple suivant, cela a été fait en utilisant le NIKFontAwesomeIconFactory:

#import "WBTabBarController.h" 
#import "NIKFontAwesomeIcon.h" 
#import "NIKFontAwesomeIconFactory.h" 
#import "NIKFontAwesomeIconFactory+iOS.h" 

@interface WBTabBarController() 

@end 

@implementation WBTabBarController 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NIKFontAwesomeIconFactory *factory = [NIKFontAwesomeIconFactory tabBarItemIconFactory]; 

    UITabBarItem *item0 = self.tabBar.items[0]; 
    item0.image = [factory createImageForIcon:NIKFontAwesomeIconApple]; 

    UITabBarItem *item1 = self.tabBar.items[1]; 
    item1.image = [factory createImageForIcon:NIKFontAwesomeIconStackOverflow]; 
} 

@end 
Questions connexes