在Swift中更改UITabBarItem上的selectedImage

我一直在尝试改变UITabBar上的选定图像。 我遵循其他Stackoverflow问题上列出的程序,但似乎没有工作。

我已经尝试通过用户定义的运行时属性部分设置图像,以及尝试将以下内容添加到AppDelegate.swift:

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 

这不会产生任何结果。 我做了一个println(tabItems [0] .title),并输出正确的标题,所以我知道对TabBarItem的引用正在工作。

有什么想法吗?

我解决了在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") 

以前的答案没有完全奏效。 我必须将新的UIImageUIImageRenderingModeAlwaysOriginal ,这解决了我的情况。

代码如下:

 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() } } 

希望为你工作

子类/扩展tabBarController并实现这些方法(我知道这是obj – c,但它应该直接转换为swift):

 #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]; }