Подтвердить что ты не робот

Как изменить выделенный цвет UIButton?

Я создал навигационную кнопку в своем UINavigationController. Я установил его для выделения при касании:

[someButton setShowsTouchWhenHighlighted:YES];

Есть ли способ изменить выделенный цвет на другое, кроме белого?

4b9b3361

Ответ 1

Попробуйте переопределить UIButton с помощью следующего метода.. и просто измените цвет кнопки backgroud кнопки, когда она находится в выделенном состоянии.

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

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

}

Попробуйте... надеюсь, что это поможет

Ответ 2

Вы можете использовать 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];

Ответ 3

В 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()
            }

        }
    }

}

Ответ 4

Я предоставил ответ 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()

Ответ 5

Используйте этот оператор для установки выделенного цвета UIButton:

[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];

Ответ 6

В 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)    
}

Ответ 7

Я получаю некоторый успех, используя старый старый трюк.

Я создал пару изображений в файлах images.xcassets, PNG, и 1px на 1px. Один - это обычный цвет, другой - цвет фона.

Я иду от чистого черного до чистого белого, так:

В раскадровке я выбираю кнопку. В "Инспекторе атрибутов" (правая панель, четвертый значок в поперечнике) я меняю тип на "custom", меняю "конфигурацию состояния" на "выделить", затем "фон" на "whitePixel" (или как вы его называли) ) и "Цвет текста" на "черный цвет".

Теперь я меняю "конфигурацию состояния" на "по умолчанию", "фон" на "черный пиксель" (или что-то еще) и "цвет текста" на "белый цвет".

Я думаю, вы можете использовать эти пиксели всякий раз, когда вам нужно применить цвет, когда у вас есть только доступ к изображениям в редакторе раскадровки.

Это увеличивает количество объектов изображения, но значительно снижает требуемый код. Что меня радует.

Ответ 8

Для 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