【问题标题】:Different colors for TabBar items in Tab Bar Controller标签栏控制器中标签栏项目的不同颜色
【发布时间】:2017-03-24 14:24:39
【问题描述】:

我有几个标签的标签栏控制器。

  • 所有选项卡项的图像和文本都应具有相同的未选择颜色。

  • 所有选项卡项都应具有不同的图像选择颜色和 文本。

我已准备好创建具有​​选定和非选定项目所需颜色的图像。而且我知道如何从 AppDelegate 更改所有选项卡的颜色

    UITabBar.appearance().tintColor = UIColorFromRGB(rgbValue: MY_COLOR, aplhaValue: 1.0)
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColorFromRGB(rgbValue: MY_COLOR, aplhaValue: 1.0)], for: UIControlState.selected)
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: UIControlState.normal)

但我想为不同的物品制作不同的颜色。

【问题讨论】:

  • 结帐this post
  • 您可以直接设置图像的色调颜色,然后根据状态为其分配所需的色调。 {UIIMAGE}.tint(with: {UIColor})

标签: ios swift uitabbar


【解决方案1】:

在你的 Storyboard 中选择你的 TabBarController 并给它一个自定义类:TabBarController 在这个例子中:

然后创建自定义的 TabBarController 文件:

//  Copyright © 2017 Erick Vavretchek. All rights reserved.

import UIKit

class TabBarController: UITabBarController {

  enum tabBarMenu: Int {
    case home
    case list
    case settings
  }

  // MARK: UITabBarController

  override func viewDidLoad() {

    super.viewDidLoad()

    guard let tabBarMenuItem = tabBarMenu(rawValue: 0) else { return }
    setTintColor(forMenuItem: tabBarMenuItem)
  }

  override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

    guard
      let menuItemSelected = tabBar.items?.index(of: item),
      let tabBarMenuItem = tabBarMenu(rawValue: menuItemSelected)
      else { return }

    setTintColor(forMenuItem: tabBarMenuItem)
  }

  // MARK: Private

  private func setTintColor(forMenuItem tabBarMenuItem: tabBarMenu) {
    switch tabBarMenuItem {
    case .home:
      viewControllers?[tabBarMenuItem.rawValue].tabBarController?.tabBar.tintColor = UIColor.green
    case .list:
      viewControllers?[tabBarMenuItem.rawValue].tabBarController?.tabBar.tintColor = UIColor.red
    case .settings:
      viewControllers?[tabBarMenuItem.rawValue].tabBarController?.tabBar.tintColor = UIColor.red
    }
  }
}

在 Assets.xcassets 文件夹中选择用于 TabBarItem 的每个图像并将它们设置为 Render As: Template Image 也很重要。这就是您可以简单地将其 tintColor 更改为您喜欢的任何内容的方法:

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 2018-11-16
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多