2009-06-10 4 views
5

Hallo ich eine Tab-Leiste Controller in Xcode erschaffe und nicht in Interface Builder. Die Titel der Ansichten in den Registerkarten legen die Titel in den Registerkarten fest, aber ich bin mir nicht sicher, wie ich Bilder einstellen soll.wie einstellen Bild für UITabBarController in Kakao Code

Kann jemand helfen?

Antwort

19

ich es herausgefunden Sie das Array von View-Controller erhalten und fügen Sie dann die Bilder:

  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 verfügt über eine tabBarItem-Eigenschaft mit einer image-Eigenschaft (geerbt von Klasse UITabBarItem Unterklassen). Zum Beispiel:

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

mein tabbarcontroller ist ein Array von uiviews Wie kann ich wissen, welches Tabaritem ist? – Atma

+0

Es scheint, dass die Eigenschaft .image von UITabBarItem nicht dokumentiert ist ... Sind Sie sicher, dass wir diese Eigenschaft verwenden sollen? – Johnus

2

die UITabBarController nicht viele Merkmale ermöglichen, wie bunte Bilder für Tableiste Artikel , Schriftarten für die Balkenelemente sowie Hintergrundbild für die Tableiste. Ich habe einen Weg gefunden. wenn man UITabBarController zu einer UITabBarController (nicht die AppDelegate) durch die xib hinzugefügt wird, gibt es auch eine UIView-Datei für die UITabBarController (mit dem Namen ‚Ansicht‘). Fügen Sie Bildansichten mit Ihren Bildern für die Tab-Leiste sowie Tab-Leiste-Elemente und Beschriftungen und alles, was Sie möchten, so hinzu, dass sie direkt unter den Rahmen der Tab-Leiste fallen. jetzt müssen wir die Tab-Fledermaus unsichtbar machen, aber immer noch machbar. Reduziere den Alpha-Wert für die Tab-Leiste des UITabBarController von Xib tp 0.02 (unter 0,01 fängt die Tab-Leiste keine Touch-Aktionen ab). du bist fertig! selbst wenn dabei programmatisch alle diese ... diese sind sehr trivial ... diese Rund über Reise vermeidet den Apfel Politik, die Entwickler nicht UITabBarController Unterklasse können. so ... cheers :)

1

schrieb ich schnell die folgende Klasse und ein-/ausblenden Registeransichten von UITabBarController wie Magie gearbeitet:

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 

Ein Beispiel für die Verwendung dieser Klasse: In Ihrem 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 
} 

Prost!