web-dev-qa-db-ja.com

タブバーアイテムのテキストの色を変更する方法

enter image description here

タブバーの「More ..」テキストの色をアイコンの色と一致するように変更するにはどうすればよいですか。 (現在、パフォーマンスはタブバーで選択されています)

TitleTextAttributesを設定してみました。

[moreItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaLTStd-Roman" size:10.0f], NSFontAttributeName,  [UIColor yellowColor],NSForegroundColorAttributeName , nil]

ただし、テキストの色は常に黄色に設定されます。アイテムが選択されている場合でも。このような enter image description here

選択すると白に設定しようとしていますが、選択しないとアイコンの色と一致するはずです。ありがとう..どんな提案も本当に役に立ちます。

15
Priyatham51

自分の質問に対する答えを見つけました。

perforamceItem setTitleTextAttributes: 2つの異なる状態。

  • forState:UIControlStateNormal
  • forState:UIControlStateHighlighted

次のコードを追加しました

 [performanceItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaLTStd-Roman" size:10.0f], NSFontAttributeName,  [UIColor yellowColor], NSForegroundColorAttributeName,nil] forState:UIControlStateNormal];

[performanceItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaLTStd-Roman" size:10.0f], NSFontAttributeName,  [UIColor whiteColor], NSForegroundColorAttributeName,nil] forState:UIControlStateHighlighted];

黄色をアイコンの色に置き換える必要があります。これは彼らが今見ている方法です。

Moreを選択した場合

When More is selected

パフォーマンスを選択した場合

When Performance is Selected

18
Priyatham51

受け入れられた回答のコードは私には機能しません。

これが機能するコードです:

    [[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor yellowColor] }
                                             forState:UIControlStateNormal];
    [[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }
                                             forState:UIControlStateSelected];
51
skywinder

これを行う無料のコード方法:

IOS 10のみを使用している場合は、タブバーで画像の色合いを変更できます

enter image description here

IOS 9以前もサポートしている場合は、各タブバー項目のユーザー定義者ランタイム属性にtintColorも追加する必要があります

enter image description here

アイコンの色も変更する場合は、正しいカラー画像がassestフォルダーにあることを確認し、[レンダリング]を[元の画像]に変更します

enter image description here

これはSwiftバージョンです:-

        for item in self.mainTabBar.items! {

          let unselectedItem: NSDictionary = [NSForegroundColorAttributeName: UIColor.whiteColor()]
          let selectedItem: NSDictionary = [NSForegroundColorAttributeName: UIColor.whiteColor()]
          item.setTitleTextAttributes(unselectedItem as? [String : AnyObject], forState: .Normal)
          item.setTitleTextAttributes(selectedItem as? [String : AnyObject], forState: .Selected)

        }

または、Appdelegateで簡単に変更できます:-

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blueColor()], forState: .Selected)
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor()], forState: .Normal)
    // Override point for customization after application launch.
    return true
}
6

スウィフト4:

UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor : UIColor.white], for: .normal)
UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor : UIColor.red], for: .selected)
3
Bruno Paulino

Swift 5.1 + iOS 12.4およびiOS 1

/// Subclass of `UITabBarController` that is used to set certain text colors for tab bar items.
class TabBarController: UITabBarController {

    override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
        if let items = tabBar.items {
            // Setting the title text color of all tab bar items:
            for item in items {
                item.setTitleTextAttributes([.foregroundColor: UIColor.black], for: .selected)
                item.setTitleTextAttributes([.foregroundColor: UIColor.lightGray], for: .normal)
            }
        }
    }
}
2
Baran Emre

Swiftソリューションの場合、型推論をあなたの友達にしましょう:

override func viewWillAppear(animated: Bool) {
  for item in self.tabBar.items! {
    let unselectedItem = [NSForegroundColorAttributeName: UIColor.blackColor()]
    let selectedItem = [NSForegroundColorAttributeName: UIColor.whiteColor()]

    item.setTitleTextAttributes(unselectedItem, forState: .Normal)
    item.setTitleTextAttributes(selectedItem, forState: .Selected)
  }
}
2
Paul King

@skywinder回答のSwiftバージョン:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.whiteColor()], forState: .Normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.whiteColor()], forState: .Selected)
2
LHIOUI

これは簡単で、単にUITabBarItemをサブクラス化し、それをストーリーボードまたはコードのタブバー項目のクラスとして割り当てます。以下は私にとって完璧に動作します。

import UIKit

class PPTabBarItem: UITabBarItem {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }
    override init() {
        super.init()
        commonInit()
    }

    func commonInit() {
        self.setTitleTextAttributes([NSFontAttributeName: UIFont.systemFontOfSize(13), NSForegroundColorAttributeName:UIColor.blackColor()], forState: UIControlState.Normal)

        self.setTitleTextAttributes([NSFontAttributeName: UIFont.systemFontOfSize(13), NSForegroundColorAttributeName:UIColor.yellowColor()], forState: UIControlState.Selected)
    }
}

スカイワインダーのソリューションは優れていますが、グローバルスコープをトリガーします。

1
PeiweiChen

これはSwift 5。

AppDelegateで:

 UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor : UIColor.red], for: .selected)
0
Marta

これは正しく動作します。

 [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                        [UIColor redColor], NSForegroundColorAttributeName,
                                                       nil] forState:UIControlStateSelected];

    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       [UIColor blackColor], NSForegroundColorAttributeName,
                                                       nil] forState:UIControlStateNormal];
0
Zღk