it-roy-ru.com

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

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

Я уже пробовал установить tintColor (о чем мне подсказывает документация, он подходит только для «некоторых» типов кнопок, которые не указывают, какие именно).

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

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

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

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

30
Luke

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

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

64
Mike Weller

Если AdjusttsImageWhenHighlighted = NO не работает, Установите для Button-Type значение Custom (IB или программно).

Тип кнопки по умолчанию: Система, изменяет поведение выделенной кнопки.

32
Greg Leszek

Свифт 3:

myButton.adjustsImageWhenHighlighted = false
6
Morten Gustafsson

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

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
    }
  }
1
onmyway133

У меня была похожая проблема с пользовательской кнопкой UIB, когда кнопка подсвечивалась серым цветом при каждом нажатии. Я решил эту проблему, создав подкласс 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, а затем сделайте свою пользовательскую кнопку подклассом этого пользовательского класса.

1
Raz