web-dev-qa-db-ja.com

UIBarButtonItemの色合いの変更

Storyboardsを使用するプロジェクトがあり、セグエでView Controllerをプッシュするたびに、動的に作成されたバーボタンアイテムは常に青になります。

enter image description here

それは私を夢中にさせています。このオブジェクトは動的に作成されるため、IBでその色を設定できません(以前のバーボタン項目で行ったように)。

私が試した解決策の中には:

  1. 受信者のviewDidLoadに設定します
  2. 受信者のviewDidAppearに設定します

    self.navigationItem.backBarButtonItem.tintColor = [UIColor whiteColor];

  3. それがうまくいかないのを見たとき、代わりにleftBarButtonItemを設定しようとしました:

self.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor];

  1. 新しいビューが呼び出されたとき、新しいビューをプッシュする前に、アプリのデリゲートで次のコード(他のSO回答)から取得しました)を試しました。

    [[UIBarButtonItem appearance] setTintColor:[UIColor whiteColor]];

私が見つけたすべてのグーグルの答えは、上記のコードを使用することをお勧めしますが、それは私のためにまったく機能していません。 iOS 7の外観APIにいくつかの変更があるのでしょうか? 「カテゴリ」をどのようにまたはどこで白に設定しようとしても、常にデフォルトの青になります。

44
Andy Ibanez

IOS 7では、アプリ内のすべてのbarButtonItemsの色を設定するには、AppDelegateのアプリケーションのウィンドウでtintColorプロパティを設定します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window.tintColor = [UIColor whiteColor];
    return YES;
}

AppleのiOS 7 UI移行ガイド の詳細情報(特に「色合いの使用」セクションの下)。

*** OR ***

コメントのいくつかに基づいて、UINavigationBar外観プロキシを使用してこれを実現することもできます。これは、ウィンドウにtintColorを設定し、そのウィンドウのすべてのサブビューに影響を与えるのではなく、UIBarButtonItemのみのtintColorに影響します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if([UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) {
        [UINavigationBar appearance].tintColor = [UIColor whiteColor];
    }

    return YES;
}
83
hgwhittle

UINavigationBarのプロパティを探していると思います。 self.navigationController.navigationBar.tintColor = [UIColor whiteColor];を設定してみてください

「ナビゲーションバーの外観」セクションを参照してください: https://developer.Apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UINavigationBar.html#//Apple_ref/doc/ uid/TP40012857-UINavigationBar-SW1

23
Yuriy Panfyorov

In Swift 3.0

let navigationBarAppearnce = UINavigationBar.appearance()

ナビゲーションバーの tintColor は、背面インジケータの画像、ボタンのタイトル、およびボタンの画像の色に影響します。

navigationBarAppearnce.barTintColor = UIColor(red: 0.180, green: 0.459, blue: 0.733, alpha: 1.00)

barTintColorプロパティは、バー自体の色に影響します

navigationBarAppearnce.tintColor = UIColor.white

最終コード

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

 let navigationBarAppearnce = UINavigationBar.appearance()

 navigationBarAppearnce.barTintColor = UIColor(red: 0.180, green: 0.459, blue: 0.733, alpha: 1.00)

 navigationBarAppearnce.tintColor = UIColor.white

 navigationBarAppearnce.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

 //Change status bar color
 UIApplication.shared.statusBarStyle = .lightContent

 return true
}

enter image description here

10
Ashok R

IOS 8では、UIAlertViewのブランド化など、何らかの目的でUIViewの色合いを変更した場合、UIToolBarのUIBarButtonItemの色合いもそのように変更されました。これを修正するには、このコードを書くだけです

[UIView appearance].tintColor = SOME_COLOR;
[UIView appearanceWhenContainedIn:[UIToolbar class], nil].tintColor = BLACK_COLOR;

UINavigationBarのUIBarButtonItemの色合いには、標準の方法を使用します

[UINavigationBar appearance].tintColor = BLACK_COLOR;
2
FunkyKat

ナビゲーションバーの特定のアイテム(ボタンなど)の色を変更するには:Objective-Cの場合

myButton.tintColor = [UIColor redColor];
1
Vette

これは私のために働いた

AddBarButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor : UIColor.white], for: .normal)
0
yehyatt
UITabBar.appearance().tintColor = UIColor.yellowColor()
0
user2643679