【问题标题】:How to tint UIBarButtonItem background color? [duplicate]如何着色 UIBarButtonItem 背景颜色? [复制]
【发布时间】:2010-07-18 05:45:42
【问题描述】:

我有一个包含 2 个按钮的 UIToolbar。工具栏有颜色:

toolbar.tintColor = [UIColor colorWithRed:(102.0/255.0) green:(20.0/255.0) blue:(11.0/255.0) alpha:1];

如何使按钮具有相似的色调?

【问题讨论】:

    标签: iphone objective-c cocoa-touch interface-builder uibarbuttonitem


    【解决方案1】:

    我发现此解决方案比此处列出的解决方案更可取:Tint UIButton and UIBarButtonItem。与公认的答案不同,它允许您独立于 UINavigationBar 更改 UIBarButtonItems 的颜色。

    如果链接在将来断开,其要点是您创建一个带有一个段的着色 UISegmentedControl(带有 UISegmentedControlStyleBar),然后创建一个 UIBarButtonItem 使用它作为其自定义视图。

    在 iOS 5 中,UIBarButtonItem 有一个tintColor 属性。

    【讨论】:

    • 太棒了!我不明白为什么不选择此作为答案,因为此方法允许您动态更改 UIBarButton 项目的背景,而不仅仅是在创建时。感谢分享!
    • 我这样做了,现在按钮不再响应操作了...知道可以做什么吗?
    • 链接似乎有问题,至少今天是这样……
    • 对于那些对此解决方案有问题的人:从 iOS 5 开始,UIBarButtonItem 具有您可以使用的 tint 属性。
    【解决方案2】:

    最好的办法是在添加按钮后设置tintColor,就像在iOS 4.0 中一样,在设置tintColor 之后,它不再更新添加到栏的按钮。

    【讨论】:

      【解决方案3】:

      请参阅“更改 UINavigationBarButtons 的颜色”

      编辑:我删除了链接,因为域已关闭...

      这是来自谷歌缓存的文本:


      好的,这是另一个快速提示。 “如何更改工具栏上按钮的颜色。”当然,这可以应用于任何工具栏,但我将在 UINavigationBar 上演示该过程。

      上图只显示了几种颜色。事实上,您可以将按钮设置为任何您想要的颜色。极好的!代码也很简单。我们要做的第一件事是打开任何将导航栏按钮变为不同颜色的对象的头文件,并声明前向类 UINavigationButton。您可以通过遍历 UINavigationBar 的子视图、读取其子视图的类名称或在您有越狱设备时通过类转储 UIKit 来获取此类。

      在你的接口声明之前添加下面一行:

      @class UINavigationButton;
      

      现在,在标题中声明一个新方法,我们将使用它来实际更改按钮的颜色。

      - (void)changeNavigationButtonColorToColor:(UIColor *)newColor
      

      或者类似上面那行代码的东西。

      现在,打开对象的实现文件并实现上述方法。在文件的任何位置,添加以下方法:

      - (void)changeNavigationButtonColorToColor:(UIColor *)newColor {
           for (UIView *view in self.navigationController.navigationBar.subviews) {
                   NSLog(@"%@", [[view class] description]);
                   if ([[[view class] description] isEqualToString:@"UINavigationButton"]) {
                           [(UINavigationButton *)view setTintColor:newColor];
                   }
           }
         }
      

      正如您在上面看到的,这实际上比最初看起来要容易得多。我们首先要做的是使用 NSFastEnumeration 设置一个 for 循环来遍历 UINavigationBar 的子视图。然后我们输出子视图的类名,以备将来参考。如果类名是 UINavigationButton,那么我们就有了我们的视图。我们所做的只是在 UINavigationButton 的情况下设置 tintColor 属性。

      就是这样,我们完成了!

      或者,如果您想要更广泛的范围,我建议创建一个新的 UINavigationBar 类别并将按钮颜色更改方法放在其中。这是您的方法可以由任何使用 UINavigationBar 的类执行,而无需一遍又一遍地重新创建相同的方法。

      请记住,后退按钮和导航按钮不是一回事。您必须单独为后退按钮着色。

      和往常一样,这里是演示此代码的示例应用程序的链接:NavButtonColor.zip

      【讨论】:

      • 非常感谢朋友!!!!!!
      【解决方案4】:

      UIBarButtonItems 固有地响应setTintColor,尽管它不是公共 API。

      我有一个自定义的UINavigationBar 子类运行这个块:

      for (UIView *subview in self.subviews) {
          if ([subview respondsToSelector:@selector(setTintColor:)]) {
              [subview performSelector:@selector(setTintColor:) withObject:[UIColor redColor]];
          }
      }
      

      显然将[UIColor redColor] 替换为您选择的颜色。

      【讨论】:

        【解决方案5】:

        适用于 iOS 5.0 及更高版本的 UIBarButtonItem:

         - (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics
        

        这似乎是目前唯一的解决方案(IOS 9.0)。 tintColor 现在用于图像颜色。

        【讨论】:

          【解决方案6】:

          Swift3

          UIBarButtonItem.appearance().tintColor = UIColor.green
          

          【讨论】:

            猜你喜欢
            • 2015-11-01
            • 1970-01-01
            • 2014-08-09
            • 2021-07-02
            • 1970-01-01
            • 2019-02-28
            • 1970-01-01
            • 2017-11-01
            • 1970-01-01
            相关资源
            最近更新 更多