Я создал навигационную кнопку в своем UINavigationController. Я установил его для выделения при касании:
[someButton setShowsTouchWhenHighlighted:YES];
Есть ли способ изменить выделенный цвет на другое, кроме белого?
Я создал навигационную кнопку в своем UINavigationController. Я установил его для выделения при касании:
[someButton setShowsTouchWhenHighlighted:YES];
Есть ли способ изменить выделенный цвет на другое, кроме белого?
Попробуйте переопределить UIButton с помощью следующего метода.. и просто измените цвет кнопки backgroud кнопки, когда она находится в выделенном состоянии.
- (void)setHighlighted:(BOOL)highlighted {
[super setHighlighted:highlighted];
if (highlighted) {
self.backgroundColor = [UIColor Your Customcolor];
}
}
Попробуйте... надеюсь, что это поможет
Вы можете использовать setBackgroundImage:forState:
для установки фонового изображения для кнопки при подсвечивании.
ex:
Как было предложено Тимом в их ответе здесь, вы можете создать 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()
}
}
}
}
Я предоставил ответ Swift, который можно использовать без какой-либо настройки, если вы хотите, чтобы выделенный цвет был затемненной версией исходного цвета фона. Если вы, с другой стороны, хотите совершенно другой выделенный цвет фона, вы можете предоставить это свойство highlightBackgroundColor как UIColor.
Ниже приведен наиболее эффективный и простой способ реализации такой функции в 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, добавив дополнительное свойство highlightBackgroundColor:
let highlightedColorButton = HighlightedColorButton.buttonWithType(.Custom) as HighlightedColorButton
highlightedColorButton.backgroundColor = UIColor.redColor()
highlightedColorButton.highlightedBackgroundColor = UIColor.blueColor()
Используйте этот оператор для установки выделенного цвета UIButton:
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
В Swift, если вы хотите использовать изображение для выделенного состояния, вы можете сделать это с помощью UIButton
:
if enabled {
//highlighted state
enableMicrophone.setImage(UIImage(named: "mic_on"), forState: .Highlighted)
} else {
//normal state
enableMicrophone.setImage(UIImage(named: "mic_off"), forState: .Normal)
}
Я получаю некоторый успех, используя старый старый трюк.
Я создал пару изображений в файлах images.xcassets
, PNG, и 1px на 1px. Один - это обычный цвет, другой - цвет фона.
Я иду от чистого черного до чистого белого, так:
В раскадровке я выбираю кнопку. В "Инспекторе атрибутов" (правая панель, четвертый значок в поперечнике) я меняю тип на "custom", меняю "конфигурацию состояния" на "выделить", затем "фон" на "whitePixel" (или как вы его называли) ) и "Цвет текста" на "черный цвет".
Теперь я меняю "конфигурацию состояния" на "по умолчанию", "фон" на "черный пиксель" (или что-то еще) и "цвет текста" на "белый цвет".
Я думаю, вы можете использовать эти пиксели всякий раз, когда вам нужно применить цвет, когда у вас есть только доступ к изображениям в редакторе раскадровки.
Это увеличивает количество объектов изображения, но значительно снижает требуемый код. Что меня радует.
Для Swift
import UIKit
extension UIImage {
func imageWithAlphaComponent(alpha: CGFloat) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, 0)
let ctx = UIGraphicsGetCurrentContext()
let area = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
CGContextScaleCTM(ctx, 1, -1)
CGContextTranslateCTM(ctx, 0, -area.size.height)
CGContextSetBlendMode(ctx, CGBlendMode.Multiply)
CGContextSetAlpha(ctx, alpha)
CGContextDrawImage(ctx, area, self.CGImage)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
Запись
button.setImage(image.imageWithAlphaComponent(0.65), forState: .Highlighted)
https://gist.github.com/yukitoto/e8aa420e20be7ab5d64b71e96ecd61f1