2015-01-11 5 views
6

Ich habe versucht, das ausgewählte Bild auf einer UITabBar zu ändern. Ich habe die in anderen Stackoverflow-Fragen aufgelisteten Prozeduren befolgt, aber nichts scheint zu funktionieren.Ändern von selectedImage auf UITabBarItem in Swift

Ich habe versucht, das Bild durch das User Defined Runtime-Einstellabschnitt Attribute, sowie versuchte folgendes AppDelegate.swift Zugabe:

var tabBarController = self.window!.rootViewController as UITabBarController 
let tabItems = tabBarController.tabBar.items as [UITabBarItem] 

var selectedImage0 = UIImage(named:"NewsfeedTabSelected") 
selectedImage0?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) 
tabItems[0].selectedImage = selectedImage0 

Diese ergeben keine Ergebnisse. Ich habe eine println (tabItems [0] .title) und die Ausgabe der richtigen Titel, so dass ich weiß, dass der Verweis auf das TabBarItem funktioniert.

Irgendwelche Gedanken?

+0

Haben Sie versucht, ausgewähltes Bild im Storyboard zu verwenden? – AMAN77

Antwort

10

Ich löste mit so etwas auf der AppDelegate.

var tabBarController = self.window!.rootViewController as UITabBarController 
var tabBar = tabBarController.tabBar as UITabBar 

var tabBarItem1 = tabBar.items![0] as UITabBarItem 
var tabBarItem2 = tabBar.items![1] as UITabBarItem 
var tabBarItem3 = tabBar.items![2] as UITabBarItem 

tabBarItem1.selectedImage = UIImage(named: "FirstSelectedImage") 
tabBarItem2.selectedImage = UIImage(named: "SecondSelectedImage") 
tabBarItem3.selectedImage = UIImage(named: "ThirdSelectedImage") 
+0

Aber es gibt einen Fehler in swift, weil der Text von tabBarItem2 verschwindet, wenn ich ihn tippe. – petesalt

5

Die vorherige Antwort funktioniert nicht vollständig. Ich muss die neue UIImage 's UIImageRenderingMode zu setzen, das löst meine Situation.

Code unten:

import UIKit 

class MainTab: UITabBarController { 

override func viewDidLoad() { 

    var tabBar = self.tabBar 

    var homeSelectImage: UIImage! = UIImage(named: "firstPageSelected")?.imageWithRenderingMode(.AlwaysOriginal) 
    var qaSelectImage: UIImage! = UIImage(named: "Q&ASelected")?.imageWithRenderingMode(.AlwaysOriginal) 
    var mySelectImage: UIImage! = UIImage(named: "myBagSelected")?.imageWithRenderingMode(.AlwaysOriginal) 

    (tabBar.items![0] as! UITabBarItem).selectedImage = homeSelectImage 
    (tabBar.items![1] as! UITabBarItem).selectedImage = qaSelectImage 
    (tabBar.items![2] as! UITabBarItem).selectedImage = mySelectImage 

    tabBar.tintColor = UIColor.greenColor() 

} 
} 

Hoffnung, die

+0

danke mann spare meine zeit – Haseeb

+0

Ein großer + zu UIImageRenderingMode schließlich hat mich das zu den Lösungen gebracht – guru

1

Subclass/verlängern TabBarController für Sie arbeiten und implementieren diese Methoden (ich weiß, es ist obj-c, aber es sollte so direkt übersetzt rasche Arbeit):

#import "const.h" 
#import "MainTabBarController.h" 

@interface MainTabBarController() 

@end 

@implementation MainTabBarController 

- (NSArray*)tabTitles { 
    return @[@"Connection", 
      @"Details", 
      [[NSUserDefaults standardUserDefaults] objectForKey:@"LastProfileResponse"] ? @"Profile" : @"Login", 
      @"Settings"]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 


    NSArray *imageNames = @[@"connection_tab_", 
          @"details_tab_", 
          @"profile_tab_", 
          @"settings_tab_" 
          ]; 

    for (int i = 0; i < self.tabBar.items.count; ++i) { 
     ((UITabBarItem*)self.tabBar.items[i]).title = self.tabTitles[i]; 

     ((UITabBarItem*)self.tabBar.items[i]).selectedImage = [UIImage imageNamed:[imageNames[i] stringByAppendingString:@"on"]]; 

     ((UITabBarItem*)self.tabBar.items[i]).image = [[UIImage imageNamed:[imageNames[i] stringByAppendingString:@"off"]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
    } 

    self.tabBar.translucent = false; 
    self.tabBar.barTintColor = SLATE_GREEN; 
    self.tabBar.tintColor = YELLOW; 
    self.delegate = self; 

    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:WHITE, 
                           NSForegroundColorAttributeName, 
                           TAB_FONT, 
                           NSFontAttributeName, nil] 
              forState:UIControlStateNormal]; 
    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:YELLOW, 
                           NSForegroundColorAttributeName, nil] 
              forState:UIControlStateSelected]; 
}