2010-11-26 6 views
1

Wenn meine App geladen wird, möchte ich das Bild auf einer der Registerkarten basierend auf einer gespeicherten Einstellung des Benutzers beim letzten Start der App ändern. Ich bin in der Lage, das Bild zu ändern, wenn der Benutzer auf die Registerkarte klickt, die die ViewDidLoad-Methode des Viewcontrollers dieses Tabs ausführt. siehe unten:iPhone, UITabBarItem: Bild einer Tableiste beim Start der App dynamisch ändern

UITabBarItem *tabItem; 
if (condition = YES) { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter plus.png"] tag:self.view.tag]; 
} 
else { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter.png"] tag:self.view.tag]; 
} 
self.navigationController.tabBarItem = tabItem; 
[tabItem release]; 
[super viewDidLoad]; 

Aber ich habe es nicht gelungen, herauszufinden, wie man den Zugriff auf und ändern Sie die UITabBarItem dieser Registerkarte in der Stammansicht Steuerung der App, wenn es geladen wird. Siehe viewdidload-Methode des Root-View-Controllers unten.

Als dies nicht funktionierte habe ich mehrere andere Möglichkeiten versucht, um auf das uitabbaritem zugreifen und ändern, aber nichts hat funktioniert. Ich habe versucht, IBOutLets im Root-View-Controller zu UITabBarItem und UINavigationController zu erstellen.

// tb is an iboutlet to the UITabBarItem 
self.tb = tabItem; 

// nc is an iboutlet to the UINavigationController 
self.nc.tabBarItem = tabItem; 

vergeblich. Irgendeine Idee, wie man das macht?

Antwort

2

Ich fand es heraus. Ich musste nur die setImage-Methode des UITabBarItem aufrufen.

//UITabBarItem *filterTab = [self.tabBar.items objectAtIndex:2]; 
if (condition == YES) { 
    [[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter plus.png"]]; 
    // [filterTab setImage:[UIImage imageNamed:@"filter plus.png"]];   
} 
else { 
    [[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter.png"]]; 
    //[filterTab setImage:[UIImage imageNamed:@"filter.png"]]; 
} 

Folgen Frage: gibt es einen Grund oder Vorteil, um den tabbaritem auf einen Zeiger zuerst zuweisen und dann die Bildeinstellung?

UITabBarItem *filterTab = [self.tabBar.items objectAtIndex:2]; 
[filterTab setImage:[UIImage imageNamed:@"filter plus.png"]]; 

versus es in einer Zeile Code wie folgt tun?

[[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter.png"]]; 
+1

Der Hauptvorteil ist, dass der Code leichter zu lesen ist. –

1

Ich glaube, Sie brauchen, dieses zu versuchen, hoffen, dass dies helfen wird,

Ich habe das ausgewählte tabbatitem Bild ändern wie -

in Tabbar Controller Delegatmethode

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

{ 
    if([tabBarController selectedIndex] == 0) 
    { 
     [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 
    }  
} 

Dadurch können Sie Ihr Image ändern.

Oder Sie können direkt in Ihrem View-Controller init (oder ViewWillAppear) -Methode, wie

 [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 

Try it !!!!