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

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

[someButton setShowsTouchWhenHighlighted:YES]; 

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

8 Solutions collect form web for “Как изменить выделенный цвет UIButton?”

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

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

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

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

В Свифт :

 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» (или как вы его называли) ) и «Цвет текста» на «черный цвет».

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

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

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

Для Свифта

 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

  • iPhone UIButton - позиция изображения
  • Xamarin Ios - Создайте закругленные кнопки только на одной стороне
  • Как сохранить и загрузить альфа-значения UIButton в приложении?
  • Добавить событие click для некоторого текста в ios NSString
  • UIButton не меняет название
  • Кнопка IOSНажмите и обновите представление
  • UIButton titleEdgeInsets
  • UIButton с изображением и текстом
  • Создание UIButton в форме изображения
  • Пользовательские UIBarButtonItems из UIButtons с настраиваемыми изображениями - возможно ли увеличить целевые объекты крана?
  • Как увеличить область видимости (попадания) (пользовательского типа) UIButton без увеличения размера фонового изображения
  • Interesting Posts

    UIActivityViewController Расширение дублирования тела Gmail

    Обновить NSError UserInfo

    Qt для iOS: требуется подписание кода

    Ткань, запрашивающая dSYM, которая не находится в архиве или файл iTunes Connect dSYM

    Воспроизведение видео в стиле Vine в iOS

    Просмотр переменных Xcode задерживает загружаемые переменные при остановке в точке останова

    IPad Safari Web Inspector сбой при загрузке страницы

    Как получать уведомления об облачных уведомлениях об изменениях, сделанных в записи, которые мне поделились?

    URL для управления подпиской в ​​iOS

    ios swift 3 – ширина UIAlertController

    Как проверить статус активации iPhone программно

    ios: анимация автозапуска, как предотвратить анимацию подвью?

    Нарисуйте пользовательскую ячейку для просмотра таблицы (uitableview), с измененными цветами и цветом и шириной разделителя

    Sprite Kit обеспечивает производительность с использованием 16×16 плиток против 32×32 плит?

    Swift: проблемы с пользовательским UIView.transition?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.