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

Измените цвет темного оттенка серого, удерживая пользовательский UIButton?

У меня есть пользовательский UIButton, который представляет собой облачный, прозрачный черно-белый .png файл, без состояния down, всего одно изображение. При нажатии и удержании пальца он становится темно-серым. Я пытаюсь изменить этот темно-серый цвет на нечто менее репрессивное. Кнопка находится в открытом виде в представлении, а не в панели вкладок, панели инструментов или контроллере навигации.

Я уже пробовал установить tintColor (который документально сообщает мне, подходит только для "некоторых" типов кнопок, в которых нет указаний на которые).

Я также попытался изменить все, что я могу найти в Interface Builder, связанные с подсветкой цветов, состояниями по умолчанию и т.д. Ничего не изменило вообще.

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

Как я могу изменить этот цвет? Я рассмотрел множество других вопросов здесь, на SO и не смог найти решение, которое работает для меня. Любая помощь будет принята с благодарностью!

EDIT:. Я решил проблему, используя категорию UIImage, которая добавляет метод, который использует CoreGraphics для применения оттенка к предоставленному UIImage. Затем я устанавливаю THAT-образ в качестве подсветки, и все хорошо. Кажется, много обручей-ля меняет цвет, который Apple должна была изменить, но c'est la vie.

4b9b3361

Ответ 1

Вы сказали, что настроили пользовательское изображение для состояния UIControlStateHighlighted. Это должно отключить поведение по умолчанию.

Если у вас все еще есть проблемы, вы можете отключить этот эффект, установив для свойства adjustsImageWhenHighlighted значение NO и использовать любой настраиваемый эффект.

Ответ 2

Если adjustsImageWhenHighlighted = NO не работает, установите "Тип кнопки" на "Пользовательский" (IB или программно).

Кнопка по умолчанию Button-Type: System, изменяет поведение выделенной кнопки.

Ответ 3

Swift 3:

myButton.adjustsImageWhenHighlighted = false

Ответ 4

У меня была аналогичная проблема с пользовательским UIButton, когда кнопка выделялась серым при каждом нажатии. Я решил эту проблему путем подклассификации UIButton, и в реализации я переопределил один метод, (void) setHighlighted: метод и сохранил его пустым:

- (void)setHighlighted:(BOOL)highlighted
{
   // Leave empty to prevent super from doing whatever
   // that it is doing to show the grey highlight.
}

Это остановило любой тип выделения, поскольку я ничего не делал в этом методе. Это лучший подход, если все, что вы пытаетесь сделать, - удалить любой эффект выделения.

Итак, в вашем коде создайте подкласс UIButton, переопределите метод setHighlighted, а затем сделайте свою пользовательскую кнопку подклассом этого настраиваемого класса.

Ответ 5

Вы можете написать пользовательскую кнопку, которая делает это

class ActionButton: UIButton {

  var originalBackgroundColor: UIColor!

  override var backgroundColor: UIColor? {
    didSet {
      if originalBackgroundColor == nil {
        originalBackgroundColor = backgroundColor
      }
    }
  }

  override var isHighlighted: Bool {
    didSet {
      guard let originalBackgroundColor = originalBackgroundColor else {
        return
      }

      backgroundColor = isHighlighted ? originalBackgroundColor.darken() : originalBackgroundColor
    }
  }