更改UIBarButtonItem的色调颜色

时间:2013-10-21 20:42:57

标签: ios objective-c ios7 uibarbuttonitem tintcolor

我有一个使用Storyboard的项目,每当我用segue推动一个视图控制器时,动态创建的条形按钮项始终是蓝色的。

enter image description here

这让我疯了。因为这个对象是动态创建的,所以我无法在IB中设置它的颜色(就像我之前的条形按钮项一样)。

我尝试的解决方案包括:

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

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

  3. 当我看到它不起作用时,我尝试设置leftBarButtonItem:

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

    1. 我在我的应用程序的委托中尝试了以下代码(我从其他SO答案中获得),当调用新视图时,以及在推送新视图之前:

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

    2. 我发现所有谷歌的答案都建议使用上面的代码,但它对我来说根本不起作用。也许iOS 7的外观API有一些变化?无论我如何或在何处尝试将“Categorías”设置为白色,它始终是默认的蓝色。

8 个答案:

答案 0 :(得分:83)

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

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

Apple's iOS 7 UI Transition Guide中的更多详细信息(特别是在“使用色调颜色”部分下)。

<强> *** *** OR

根据一些评论,您还可以使用UINavigationBar外观代理实现此目的。这将影响仅UIBarButtonItems的tintColor,而不是在窗口上设置tintColor并影响该窗口的所有子视图。

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

    return YES;
}

答案 1 :(得分:22)

我认为您正在寻找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

答案 2 :(得分:10)

  

在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

答案 3 :(得分:2)

在iOS 8中,如果您出于某种目的更改了UIView色调颜色,例如为品牌UIAlertView,UIToolBar中UIBarButtonItem的色彩颜色也改变了这种方式。要解决此问题,只需编写此代码

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

对于UINavigationBar中的UIBarButtonItem色调,请使用标准方法

[UINavigationBar appearance].tintColor = BLACK_COLOR;

答案 4 :(得分:1)

要更改导航栏中特定项目(例如按钮)的颜色,请执行以下操作: 在Objective-C

myButton.tintColor = [UIColor redColor];

答案 5 :(得分:0)

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

答案 6 :(得分:0)

这对我有用

AddBarButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor : UIColor.white], for: .normal)

答案 7 :(得分:0)

快速5

barButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor : UIColor.white], for: .normal)