在 Swift 中更改 UITabBarItem 上的 selectedImage
Changing selectedImage on UITabBarItem in Swift
我一直在尝试更改 UITabBar 上的选定图像。我遵循了其他 Whosebug 问题中列出的步骤,但似乎没有任何效果。
我尝试通过用户定义的运行时属性部分设置图像,并尝试将以下内容添加到 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")
之前的答案并不完全有效。
我必须将新 UIImage
的 UIImageRenderingMode
设置为 AlwaysOriginal
,这解决了我的情况。
代码如下:
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()
}
}
希望对你有用
Subclass/extend 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];
}
我一直在尝试更改 UITabBar 上的选定图像。我遵循了其他 Whosebug 问题中列出的步骤,但似乎没有任何效果。
我尝试通过用户定义的运行时属性部分设置图像,并尝试将以下内容添加到 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")
之前的答案并不完全有效。
我必须将新 UIImage
的 UIImageRenderingMode
设置为 AlwaysOriginal
,这解决了我的情况。
代码如下:
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()
}
}
希望对你有用
Subclass/extend 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];
}