我有一个自定义UIButton
,它是一个云,透明的黑白.png文件,没有关闭状态,只有一个图像。当用手敲击并握住手指时,它会变成深灰色。我试图把那个深灰色改成一点不那么压抑的东西。该按钮在视图中处于打开状态,而不是在标签栏,工具栏或导航控制器中。
我已经尝试设置tintColor
(文档有用地通知我只适用于'某些'类型的按钮,这些按钮没有任何指示。)
我也尝试过更改我在Interface Builder中可以找到的与高亮颜色,默认状态等相关的所有内容。没有任何结果可以产生任何影响。
我甚至尝试将按钮自己的图像设置为UIControlStateHighlighted
状态,但即使如此,当我用手指按住它时,也会出现深灰色叠加。
如何更改颜色?我已经在SO上查看了许多其他问题,并且无法找到适合我的解决方案。任何帮助将不胜感激!
编辑:我使用UIImage
类别解决了问题,该类别添加了一种方法,该方法使用CoreGraphics
将色调应用于提供的UIImage
。然后我将THAT图像设置为亮点,一切都很好。似乎有很多改变颜色的苹果应该让我们改变颜色,但是我可以改变它。
答案 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
}
}