39

我有一个自定义UIButton,它是一个云、透明的黑白 .png 文件,没有关闭状态,只有一个图像。当用手指轻敲并按住它时,它会变成深灰色。我正在尝试将那种深灰色改为不那么压抑的东西。该按钮在视图中打开,而不是在选项卡栏、工具栏或导航控制器中。

我已经尝试过设置tintColor(文档有帮助地告诉我,它只适用于“某些”类型的按钮,没有说明是哪一个)。

我还尝试更改在 Interface Builder 中可以找到的与突出显示颜色、默认状态等相关的所有内容。没有任何改变。

我什至尝试为按钮的UIControlStateHighlighted状态设置自己的图像,但即使这样,当我将手指放在它上面时,也会出现深灰色的覆盖层。

我怎样才能改变这种颜色?我在 SO 上查看了许多其他问题,但无法找到适合我的解决方案。任何帮助将不胜感激!

编辑:我使用一个类别解决了这个问题,该类别UIImage添加了一种方法,用于CoreGraphics将色调应用于提供的UIImage. 然后我将那个图像设置为亮点,一切都很好。似乎很多箍拉改变颜色苹果应该让我们改变,但c'est la vie。

4

5 回答 5

76

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

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

于 2013-04-12T08:00:53.397 回答
38

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

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

于 2013-11-04T16:06:16.337 回答
12

斯威夫特 3:

myButton.adjustsImageWhenHighlighted = false
于 2017-03-14T12:58:44.320 回答
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 方法,然后让你的自定义按钮成为这个自定义类的子类。

于 2013-07-19T03:00:27.800 回答
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
    }
  }
于 2017-03-27T10:46:25.450 回答