(Swift)标签栏项目:自定义选定图像,渲染为原始图像未显示

时间:2016-12-28 11:24:02

标签: swift image uinavigationcontroller uitabbarcontroller uitabbaritem

首先,我是Swift的新手,如果我遗漏了一些明显或使用了错误的术语,我会道歉。

目标:将标签栏项目选中的图像设置为自定义图像。

以下设置有效(所选项目为自定义图片):

| UITabBarController | => | UIViewController | (设置与故事板)

TBluetoothSocket.SendData(Byte>) Method

但此设置不起作用(所选项目具有默认的蓝色色调):

| UITabBarController | => | UINavigationController | => | UIViewController | (设置w / storyboard - see here

与上面类似的代码,但是(以编程方式)将UICollectionView子视图添加到UIViewController。

class MyViewController: UIViewController {  
    override func viewDidLoad() {
        super.viewDidLoad()
        let customSelectedImage = UIImage (named: "selected-image")?.withRenderingMode(.alwaysOriginal)
        self.tabBarItem.selectedImage = customSelectedImage
    }
}

有些可能有帮助的事情:

  • 在调试会话中(see print screen)=>查看UI层次结构:所选项目(标记为UITabBarSwappableImageView类)具有正确的自定义图像,但色调为默认蓝色。我尝试使用不同的自定义图像,看起来好像被另一个(默认?)视图隐藏了......
  • 如果我在AppDelegate.swift应用程序(... didFinishLaunchingWithOptions ...)函数中更改UITabBar.appearance()。tintColor = UIColor.red,则所选项目具有红色(vs蓝色)色调。

发生了什么事?

1 个答案:

答案 0 :(得分:0)

我扩展了UITabBarController:

extension UITabBarController {

    func updateTabBarItem(tab: Int, image: UIImage?) {

        guard let tabItems = tabBar.items, tab < tabItems.count && tab >= 0
            else { return }

        let tabItem = tabItems[tab]
        tabItem.image = image?.withRenderingMode(.alwaysOriginal)
        tabItem.selectedImage = tabItem.image

    }

}

这将有助于访问tabBar.items而无需加载任何视图控制器(选项卡0的第一个视图控制器除外)。

class MyViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        tabBarController?.updateTabBarItem(tab: 1, image: UIImage(named: "selected-image")) // update the second tab's image here (just for example)
    }

}

例如,如果要更改选项卡2所选图像,在viewDidLoad上创建一个断点:在第二个视图控制器上,您会发现断点未命中,这就是标签项图像不会出现的原因更新。