Как изменить выделенный цвет 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

  • Пользовательский UITableViewCell, кнопка в ячейке не работает
  • как добавить несколько кнопок в scrollview
  • Изменение размера кнопки в iOS программно
  • ios 8 - кнопки в горизонтальном прокрутке, перехватывающие событие панорамы - прокрутка не работает
  • Как отключить цвет оттенков UIButton?
  • UIButton работает неправильно в iOS 7
  • Как добавить кнопку «добавить» в конце видимого вида коллекции в iOS
  • получить indexPath из UITableViewCell при нажатии кнопки из ячейки
  • UIButton - изображение в состоянии по умолчанию, название в выбранном состоянии
  • Могу ли я заменить * UILabel на UIButton на FXLabel?
  • Ручная настройка состояния UIButton
  • Interesting Posts

    Как скопировать объект между 2 NSManagedObjectContext

    По-видимому необъяснимый результат CGAffineTransformInvert

    Обходное решение для ошибки компиляции Unity5 с помощью facebook-unity-sdk 6.2.1

    Обработка push-уведомлений в новой версии приложения iOS

    Правильный способ конвертировать NSString в NSDate на iOS?

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

    В Swift я могу определить, действительно ли CLLocation действителен или нет?

    Каковы мои возможности для внедрения системы виртуальных кредитов для Mac-приложения?

    Пользовательский вид ввода в виде клавиатуры для текстового поля в Swift с использованием OSX 10.9 и Xcode 6.1.1 +

    Предупреждения Xcode 7 с Google Signin lib при создании проекта

    Нужен ли мне метод dealloc с ARC?

    Получите процент перехода в UINavigationController

    LLDB и <<регистр XY недоступен> "

    Доступ к камере в симуляторе IOS

    Получение отдельных строк из таблицы Realm в iOS

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