Измените цвет темного оттенка серого, удерживая пользовательский UIButton?
У меня есть пользовательский UIButton
, который представляет собой облачный, прозрачный черно-белый .png файл, без состояния down, всего одно изображение. При нажатии и удержании пальца он становится темно-серым. Я пытаюсь изменить этот темно-серый цвет на нечто менее репрессивное. Кнопка находится в открытом виде в представлении, а не в панели вкладок, панели инструментов или контроллере навигации.
Я уже пробовал установить tintColor
(который документально сообщает мне, подходит только для "некоторых" типов кнопок, в которых нет указаний на которые).
Я также попытался изменить все, что я могу найти в Interface Builder, связанные с подсветкой цветов, состояниями по умолчанию и т.д. Ничего не изменило вообще.
Я даже попробовал установить собственное изображение кнопки для своего состояния UIControlStateHighlighted
, но даже это вызывает появление темно-серого наложения, когда я держу палец над ним.
Как я могу изменить этот цвет? Я рассмотрел множество других вопросов здесь, на SO и не смог найти решение, которое работает для меня. Любая помощь будет принята с благодарностью!
EDIT:. Я решил проблему, используя категорию UIImage
, которая добавляет метод, который использует CoreGraphics
для применения оттенка к предоставленному UIImage
. Затем я устанавливаю THAT-образ в качестве подсветки, и все хорошо. Кажется, много обручей-ля меняет цвет, который Apple должна была изменить, но c'est la vie.
Ответы
Ответ 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
}
}