如何更改UIButton的突出显示颜色?

Cod*_*key 39 iphone objective-c uibutton ios

我在UINavigationController中创建了一个导航按钮.我将其设置为在触摸时突出显示:

[someButton setShowsTouchWhenHighlighted:YES];
Run Code Online (Sandbox Code Playgroud)

有没有办法将突出显示的颜色更改为默认白色以外的其他颜色?

Use*_*343 49

尝试使用以下方法覆盖UIButton ..只需更改按钮的背景颜色,当它处于突出显示状态时.

- (void)setHighlighted:(BOOL)highlighted {
    [super setHighlighted:highlighted];

    if (highlighted) {
        self.backgroundColor = [UIColor Your Customcolor];
    }
    else{
        self.backgroundColor = [UIColor Your DefaultColor];
    }   

}
Run Code Online (Sandbox Code Playgroud)

试试吧..希望它有所帮助

  • 示例:self.backgroundColor =突出显示?[UIColor darkGrayColor]:[UIColor blueColor]; (4认同)

小智 46

您可以使用setBackgroundImage:forState:突出显示时为按钮设置背景图像.

例如:

正如蒂姆在这里的回答所建议的那样,你可以创建一个UIImage来自UIColor:

- (UIImage *)imageWithColor:(UIColor *)color {
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}
Run Code Online (Sandbox Code Playgroud)

然后在突出显示时将图像设置为按钮的背景图像

[button setBackgroundImage:[self imageWithColor:[UIColor blueColor]] forState:UIControlStateHighlighted];


Kin*_*ard 24

Swift中:

import UIKit

class CustomUIButtonForUIToolbar: UIButton {

    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func drawRect(rect: CGRect) {
        // Drawing code
        super.drawRect(rect)

        self.layer.borderColor = UIColor.blueColor().CGColor
        self.layer.borderWidth = 1.0
        self.layer.cornerRadius = 5.0
        self.clipsToBounds = true
        self.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)

        self.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Highlighted)
    }

    override var highlighted: Bool {
        didSet {

            if (highlighted) {
                self.backgroundColor = UIColor.blueColor()
            }
            else {
                self.backgroundColor = UIColor.clearColor()
            }

        }
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,这些代码都不应该在`drawRect`中.`drawRect`用于绘制图形上下文.我个人把它们放入`awakeFromNib`但是`init?(编码器:)`也可以. (3认同)

ArV*_*20u 5

如果您希望突出显示的颜色是原始背景颜色的深色版本,我将提供一个Swift答案,无需任何自定义即可使用。另一方面,如果您想要完全不同的突出显示的背景颜色,则可以将其作为UIColor提供给HighlightedBackgroundColor属性。

以下是在Swift中实现此类功能的最有效,最直接的方法。它也是通用的,这意味着它可以用于许多具有不同颜色的不同按钮。

这是代码:

import UIKit

class HighlightedColorButton: UIButton {

    // A new highlightedBackgroundColor, which shows on tap
    var highlightedBackgroundColor: UIColor?
    // A temporary background color property, which stores the original color while the button is highlighted
    var temporaryBackgroundColor: UIColor?


    // Darken a color
    func darkenColor(color: UIColor) -> UIColor {

        var red = CGFloat(), green = CGFloat(), blue = CGFloat(), alpha = CGFloat()

        color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)

        red = max(red - 0.5, 0.0)
        green = max(green - 0.5, 0.0)
        blue = max(blue - 0.5, 0.0)

        return UIColor(red: red, green: green, blue: blue, alpha: alpha)
    }


    // Set up a property observer for the highlighted property, so the color can be changed
    @objc override var highlighted: Bool {
        didSet {
            if highlighted {
                if temporaryBackgroundColor == nil {
                    if backgroundColor != nil {
                        if let highlightedColor = highlightedBackgroundColor {
                            temporaryBackgroundColor = backgroundColor
                            backgroundColor = highlightedColor
                        } else {
                            temporaryBackgroundColor = backgroundColor
                            backgroundColor = darkenColor(temporaryBackgroundColor!)
                        }
                    }
                }
            } else {
                if let temporaryColor = temporaryBackgroundColor {
                    backgroundColor = temporaryColor
                    temporaryBackgroundColor = nil
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

将按钮视为普通的UIButton,并添加了可选属性HighlightedBackgroundColor:

let highlightedColorButton = HighlightedColorButton.buttonWithType(.Custom) as HighlightedColorButton
highlightedColorButton.backgroundColor = UIColor.redColor()
highlightedColorButton.highlightedBackgroundColor = UIColor.blueColor()
Run Code Online (Sandbox Code Playgroud)