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

 十分风格的功夫_723 发布于 2023-02-13 17:32

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

[someButton setShowsTouchWhenHighlighted:YES];

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

4 个回答
  • 如果您希望突出显示的颜色是原始背景颜色的深色版本,我将提供一个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
                    }
                }
            }
        }
    }
    

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

    let highlightedColorButton = HighlightedColorButton.buttonWithType(.Custom) as HighlightedColorButton
    highlightedColorButton.backgroundColor = UIColor.redColor()
    highlightedColorButton.highlightedBackgroundColor = UIColor.blueColor()
    

    2023-02-13 17:34 回答
  • 您可以使用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;
    }
    

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

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

    2023-02-13 17:34 回答
  • 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()
                }
    
            }
        }
    
    }
    

    2023-02-13 17:34 回答
  • 尝试使用以下方法覆盖UIButton ..只需更改按钮的背景颜色,当它处于突出显示状态时.

    - (void)setHighlighted:(BOOL)highlighted {
        [super setHighlighted:highlighted];
    
        if (highlighted) {
            self.backgroundColor = [UIColor Your Customcolor];
        }
        else{
            self.backgroundColor = [UIColor Your DefaultColor];
        }   
    
    }
    

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

    2023-02-13 17:35 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有