【问题标题】:Changing selectedImage on UITabBarItem in Swift在 Swift 中更改 UITabBarItem 上的 selectedImage
【发布时间】:2015-01-11 19:06:28
【问题描述】:

我一直在尝试更改 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 的引用正在工作。

有什么想法吗?

【问题讨论】:

  • 您是否尝试过在情节提要中使用选定的图像?

标签: ios swift uitabbaritem


【解决方案1】:

前面的答案并不完全有效。 我必须将新的UIImageUIImageRenderingMode 设置为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()

}
}

希望对你有用

【讨论】:

  • UIImageRenderingMode 的一大亮点终于把我带到了解决方案
【解决方案2】:

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

【讨论】:

  • 但是swift中有一些错误,因为当我点击它时tabBarItem2的文本消失了。
【解决方案3】:

子类/扩展 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];
}

【讨论】:

    猜你喜欢
    • 2018-01-01
    • 2017-11-12
    • 2017-07-23
    • 1970-01-01
    • 2023-03-20
    • 2012-06-19
    • 2012-04-06
    • 2010-10-19
    相关资源
    最近更新 更多