【问题标题】:set tint color of an UIBarButtonItem for a specific view controller ios6为特定视图控制器 ios6 设置 UIBarButtonItem 的色调颜色
【发布时间】:2014-02-05 11:05:11
【问题描述】:

从应用程序调用:willFinishLaunchingWithOptions:

+(void)styleNavbar {
  [[UIBarButtonItem appearance] setTintColor:[UIColor colorWithRed:45/255.0 green:48/255.0 blue:53/255.0 alpha:1]];
  [[UIBarButtonItem appearance] setTitleTextAttributes:@{UITextAttributeTextColor:[UIColor whiteColor], UITextAttributeTextShadowColor:[UIColor blackColor], UITextAttributeTextShadowOffset: [NSValue valueWithCGSize:CGSizeMake(0,1.0)]} forState:UIControlStateNormal];
  [[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:22/255.0 green:24/255.0 blue:26/255.0 alpha:1]];
}

我现在尝试在视图控制器中使用与我的一个故事板不同的配色方案。

我已经能够为导航栏和普通按钮设置色调。

在我的 -viewDidLoad 中:

[self.navigationController.navigationBar setTintColor:[MyColorScheme sharedInstance].lightBlueColor];
[self.navigationItem.rightBarButtonItem setTintColor:[MyColorScheme sharedInstance].lightBlueColor];

但是我正在努力对继续使用全局颜色方案的后退按钮做同样的事情,除非我注释掉 +styleNavbar 行。我没有成功尝试:

[self.navigationController.navigationBar.backItem.backBarButtonItem setTintColor:[MyColorScheme sharedInstance].lightBlueColor];
[self.navigationItem.backBarButtonItem setTintColor:[MyColorScheme sharedInstance].lightBlueColor];
[self.navigationItem.leftBarButtonItem setTintColor:[MyColorScheme sharedInstance].lightBlueColor];
[[UIBarButtonItem appearanceWhenContainedIn:[MySpecificViewController class], nil] setTintColor:[MyColorScheme sharedInstance].lightBlueColor];

运行上述所有行似乎不会覆盖后退按钮的色调,即使我可以使用相同的方法设置其他导航栏元素的样式。是否可以在使用应用程序范围的外观代理设置后退按钮的颜色后为其设置样式?

【问题讨论】:

    标签: ios uibarbuttonitem


    【解决方案1】:

    使用appearanceWhenContainedIn: 覆盖特定视图控制器的工具栏/导航栏的全局设置。您需要为想要以不同方式着色的导航栏/工具栏创建一个子类。 The Apple documentation 举例说明了如何做到这一点。

    【讨论】:

    • 我已经尝试过(在发布代码的最后一行):[[UIBarButtonItem appearanceWhenContainedIn:[MySpecificViewController class], nil] setTintColor:[MyColorScheme sharedInstance].lightBlueColor];这条线(在其他尝试中)什么都不做,因此这个问题。我很抱歉没有说得更清楚,但粘贴的代码总共有 9 行,所以应该不难发现。
    • 抱歉,这是因为 BarButtonItem 实际上并不包含在您的 ViewController 中,而是包含在 Toolbar/NavigationBar 中。您必须创建 UINavigationBar/UIToolbar 的子类并将其用于自定义样式。
    • 谢谢。现在说得通了。
    • 一个巧妙的方法!谢谢。
    【解决方案2】:

    您可以像这样在viewWillAppear 上更新条形按钮的标题文本属性:

    [self.rightBarButton setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor orangeColor]} forState:UIControlStateNormal];
    

    如果你想在离开这个视图控制器时设置旧的文本属性,你可以在viewWillDisappear上重新更新它。

    【讨论】:

      【解决方案3】:

      [[UINavigationBar 外观] setTintColor:[UIColor colorWithRed:251.0/255.0 green:59.0/255.0 blue:29.0/255.0 alpha:1.0]];

      【讨论】:

      • 我知道这会覆盖整个应用程序中导航栏的色调?不确定这是否与我的问题有关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2016-12-22
      • 2017-06-07
      • 1970-01-01
      • 2015-12-28
      相关资源
      最近更新 更多