2009-06-10 13 views

risposta

19

ho capito si può ottenere la serie di controller di vista e quindi aggiungere le immagini:

  NSArray *tabs = tabBarController.viewControllers; 
UIViewController *tab1 = [tabs objectAtIndex:0]; 
tab1.tabBarItem.image = [UIImage imageNamed:@"clockicon.png"]; 
UIViewController *tab2 = [tabs objectAtIndex:1]; 
tab2.tabBarItem.image = [UIImage imageNamed:@"nearest.png"]; 
11

UIViewController ha una proprietà tabBarItem che ha un image proprietà (ereditata dalla classe UIBarItemUITabBarItem sottoclassi). Per esempio:

viewController.tabBarItem.image = [UIImage imageNamed:@"foo.png"]; 
+0

il mio tabbarcontroller è una matrice di visualizzazioni come faccio a sapere qual è il tabbaritem? – Atma

+0

sembra che la proprietà .image di UITabBarItem non sia documentata ... sei sicuro che dovremmo usare quella proprietà? – Johnus

2

il UITabBarController non consente molti tratti, come immagini a colori per gli elementi barra delle schede , i caratteri per gli elementi della barra e l'immagine di sfondo per la barra delle schede. ho trovato un modo per aggirare. quando uno UITabBarController viene aggiunto a un UITabBarController (non delegato dell'app) attraverso il file xib, esiste anche un file UIView per il UITabBarController (con il nome 'vista'). aggiungi visualizzazioni di immagini con le tue immagini per la barra delle schede e gli elementi della barra delle schede, le etichette e qualsiasi altra cosa desideri, in modo tale che ricadano direttamente sotto la cornice della barra delle schede. ora dobbiamo rendere invisibile il tab bat, ma comunque fattibile. ridurre il valore alfa per la barra delle schede dello UITabBarController da xib tp 0,02 (al di sotto di 0,01 la barra delle schede non cattura le azioni di tocco). hai fatto! anche quando si fanno tutti questi programmaticamente ... questi sono molto banali ... questo viaggio di andata e ritorno evita la politica della mela che gli sviluppatori non possono sottoclasse UITabBarController. così ... :) applausi

1

ho scritto in fretta la classe seguente e visualizzare/nascondere la visualizzazione a schede da UITabBarController funzionato come per magia:

TabBarDesigner.h

#import <Foundation/Foundation.h> 
@interface TabBarDesigner : NSObject 
{ 

} 

+(void) setTabBarController:(UITabBarController *)tabBarController 
         items:(NSArray *)tabBarItems 
      viewControllers:(NSArray *)viewControllers; 

+(void) removeItemsInRange:(NSRange) range; 

@end 

TabBarDesigner.m

#import "TabBarDesigner.h" 

static NSArray *_tabBarItems = NULL; 
static NSArray *_viewControllers = NULL; 
static UITabBarController *_tabBarController = NULL; 

@implementation TabBarDesigner 

+(void) setTabBarController:(UITabBarController *)tabBarController 
         items:(NSArray *)tabBarItems 
      viewControllers:(NSArray *)viewControllers 
{ 
    if (tabBarItems && viewControllers && tabBarController) 
    { 
     if ([tabBarItems count] == [viewControllers count]) 
     { 
      [_tabBarItems release]; 
      [_viewControllers release]; 
      _tabBarItems = [tabBarItems copy]; 
      _viewControllers = [viewControllers copy]; 
      _tabBarController = tabBarController; 
     } 
    } 
} 

+(void) removeItemsInRange:(NSRange) range 
{ 
    if (_tabBarController) 
    { 
     if (range.location < ([_tabBarItems count] - 1)) 
     { 
      if ((range.length + range.location) < [_tabBarItems count]) 
      { 
       NSMutableArray *tabBarItems = [_tabBarItems mutableCopy]; 
       [tabBarItems removeObjectsInRange:range]; 
       NSMutableArray *viewControllers = [_viewControllers mutableCopy]; 
       [viewControllers removeObjectsInRange:range]; 
       [_tabBarController setViewControllers:viewControllers]; 
       NSUInteger i; 
       for (i = 0; i< [viewControllers count]; i++) 
       { 
        UIViewController *vC = [viewControllers objectAtIndex:i]; 
        vC.tabBarItem.image = [[tabBarItems objectAtIndex:i] image]; 
        vC.tabBarItem.title = [[tabBarItems objectAtIndex:i] title]; 
        vC.tabBarItem.tag = [[tabBarItems objectAtIndex:i] tag]; 
       } 

       [tabBarItems release]; 
       [viewControllers release]; 

      } 


     } 
    } 
} 


@end 

Un esempio di come utilizzare questa classe: In MyAppDelegate.m

#import "TabBarDesigner.h" 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [TabBarDesigner setTabBarController:_tabBarController 
            items:[_tabBarController.tabBar items] 
         viewControllers:[_tabBarController viewControllers]]; 
    // remove the first 3 tabs 
    [TabBarDesigner removeItemsInRange:NSMakeRange(0,3)]; 
    // show all tabs 
    [TabBarDesigner removeItemsInRange:NSMakeRange(0,0)]; 
    // continue with your code 
} 

Cheers!

Problemi correlati