我在UINavigationController中创建了一个导航按钮.我将其设置为在触摸时突出显示:
[someButton setShowsTouchWhenHighlighted:YES];
有没有办法将突出显示的颜色更改为默认白色以外的其他颜色?
如果您希望突出显示的颜色是原始背景颜色的深色版本,我将提供一个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()
您可以使用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];
在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() } } } }
尝试使用以下方法覆盖UIButton ..只需更改按钮的背景颜色,当它处于突出显示状态时.
- (void)setHighlighted:(BOOL)highlighted { [super setHighlighted:highlighted]; if (highlighted) { self.backgroundColor = [UIColor Your Customcolor]; } else{ self.backgroundColor = [UIColor Your DefaultColor]; } }
试试吧..希望它有所帮助