改变UIBarButtonItem的色调

我有一个使用故事板的项目,每当我用一个segue推动视图控制器时,dynamic创build的栏button项总是蓝色的。

在这里输入图像说明

这让我疯狂。 因为这个对象是dynamic创build的,所以我不能在IB中设置它的颜色(就像我之前的barbutton项目所做的那样)。

我尝试过的解决scheme是:

  1. 将其设置在接收者的viewDidLoad
  2. 将其设置在接收者的viewDidAppear

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

  3. 当我看到这不太有效,我试着设置leftBarButtonItem:

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

  1. 我已经尝试了下面的代码(我从其他答案中得到)在我的应用程序的委托,当新视图被调用,并在推新视图之前:

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

我find的所有谷歌答案build议使用上面的代码,但它根本不工作。 也许iOS 7的外观API有一些变化? 无论我怎样或在哪里设置“Categorías”为白色,它总是默认的蓝色。

在iOS 7中,要设置应用程序中所有barButtonItem的颜色,请在AppDelegate的应用程序窗口中设置tintColor属性。

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

Apple iOS 7 UI过渡指南中的更详细的信息(具体在“使用色调”部分下)。

***要么***

基于一些评论,你也可以通过UINavigationBar外观代理来实现这一点。 这将仅影响UIBarButtonItems的tintColor,而不是在窗口上设置tintColor并影响该窗口的所有子视图。

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

我想你正在寻找你的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

在Swift 3.0中

 let navigationBarAppearnce = UINavigationBar.appearance() 

导航栏的tintColor影响后方指示器图像,button标题和button图像的颜色。

 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 } 

在这里输入图像说明

 UITabBar.appearance().tintColor = UIColor.yellowColor() 

在iOS 8中,如果您为了某种目的而更改了UIView tint color,例如用于品牌化UIAlertView,UIToolBar中的UIBarButtonItem的tint color也改变了这种方式。 要解决这个问题,只需编写这个代码

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

对于UINavigationBar中的UIBarButtonItem色彩使用标准方法

 [UINavigationBar appearance].tintColor = BLACK_COLOR; 

要更改导航栏中特定项目(例如button)的颜色:在Objective-C中

 myButton.tintColor = [UIColor redColor];