按住自定义UIButton时更改深灰色突出显示的颜色?

时间:2013-04-12 07:58:35

标签: ios objective-c uibutton tint

我有一个自定义UIButton,它是一个云,透明的黑白.png文件,没有关闭状态,只有一个图像。当用手敲击并握住手指时,它会变成深灰色。我试图把那个深灰色改成一点不那么压抑的东西。该按钮在视图中处于打开状态,而不是在标签栏,工具栏或导航控制器中。

我已经尝试设置tintColor(文档有用地通知我只适用于'某些'类型的按钮,这些按钮没有任何指示。)

我也尝试过更改我在Interface Builder中可以找到的与高亮颜色,默认状态等相关的所有内容。没有任何结果可以产生任何影响。

我甚至尝试将按钮自己的图像设置为UIControlStateHighlighted状态,但即使如此,当我用手指按住它时,也会出现深灰色叠加。

如何更改颜色?我已经在SO上查看了许多其他问题,并且无法找到适合我的解决方案。任何帮助将不胜感激!

编辑:我使用UIImage类别解决了问题,该类别添加了一种方法,该方法使用CoreGraphics将色调应用于提供的UIImage。然后我将THAT图像设置为亮点,一切都很好。似乎有很多改变颜色的苹果应该让我们改变颜色,但是我可以改变它。

5 个答案:

答案 0 :(得分:64)

您说您为UIControlStateHighlighted州设置了自定义图片。此应该禁用默认行为。

如果您仍然遇到问题,可以将adjustsImageWhenHighlighted属性设置为NO并使用您想要的任何自定义效果来禁用此效果。

答案 1 :(得分:33)

如果adjustsImageWhenHighlighted = NO不起作用, 将Button-Type设置为Custom(IB或以编程方式)。

默认按钮类型:系统,更改突出显示按钮的行为。

答案 2 :(得分:6)

斯威夫特3:

myButton.adjustsImageWhenHighlighted = false

答案 3 :(得分:1)

当按钮每次按下时都以灰色突出显示时,我遇到了与自定义UIButton类似的问题。我通过继承UIButton解决了这个问题,在实现中我覆盖了一个方法,(void)setHighlighted:方法并将其保持为空:

- (void)setHighlighted:(BOOL)highlighted
{
   // Leave empty to prevent super from doing whatever
   // that it is doing to show the grey highlight.
}

由于我没有在方法中做任何事情,因此停止了任何类型的突出显示。如果你想要做的就是删除任何突出显示效果,这是一种更好的方法。

因此,在代码中,创建UIButton的子类,覆盖setHighlighted方法,然后使自定义按钮成为此自定义类的子类。

答案 4 :(得分:1)

您可以编写一个自定义按钮来执行此操作

class ActionButton: UIButton {

  var originalBackgroundColor: UIColor!

  override var backgroundColor: UIColor? {
    didSet {
      if originalBackgroundColor == nil {
        originalBackgroundColor = backgroundColor
      }
    }
  }

  override var isHighlighted: Bool {
    didSet {
      guard let originalBackgroundColor = originalBackgroundColor else {
        return
      }

      backgroundColor = isHighlighted ? originalBackgroundColor.darken() : originalBackgroundColor
    }
  }