Как отключить состояние управления подсветкой UIButton?

147

У меня есть кнопка UIB, которая при выборе не должна менять состояние при прикосновении. Поведение по умолчанию для него должно быть в UIControlStateHighlighted при прикосновении, и это меня злит.

Предложения?

kbanman
источник

Ответы:

313

Ваша кнопка должна иметь buttonTypeзначение Custom.

В IB вы можете снять флажок «Подсветка настраивает изображение».

Программно вы можете использовать theButton.adjustsImageWhenHighlighted = NO;

Аналогичные параметры доступны и для «отключенного» состояния.

Гайдн
источник
1
Есть ли шанс, что вы знаете, какой будет программная версия? Прямо сейчас у меня это работает хакерски, отключив его, и выбрав его как выбранный.
Кбанман
99
uibutton.adjustsImageWhenHighlighted = NO;
Гайдн
43
Также убедитесь, что тип кнопки установлен на CUSTOM. (Как упоминал Мосиб Асад в другом ответе)
Влад Лего
Большой!!! только небольшое и очевидное изменение, которое я пропустил !!! Я установил тип класса UIButton в MyCustomClass, но забыл изменить его. Так что это давало невыбранный эффект подсветки кнопки. Спасибо еще раз.
Винод Супнекар
38

В дополнение к вышеприведенному ответу о снятии отметки «выделение корректирует изображение» в IB, убедитесь, что тип кнопки установлен CUSTOM.

Мосиб Асад
источник
2
Это была недостающая часть: кнопка типа CUSTOM. Thanx!
JOM
1
Что если я хотел бы сохранить системную UIButton? я не могу удалить выделение корректирует изображение?
Амжад Хуссейни
36

Это будет работать для вас:

[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];

3-я строка - это трюк здесь ...

Это работает так же для установки изображения / backgroundImage

Маниш Ахаджа
источник
1
Это прекрасно работает для меня. adjustsImageWhenHighlightedСвойство , UIButtonкажется, затрагивает только фоновое изображение.
Майкл Тиль
Имейте в виду, что если вы решите присвоить изображение «отключенному состоянию», вы не вызовете setBackgroundImage. Вместо этого вы должны сделать следующее [кнопка setImage: image forState: UIControlStateDisabled]; Также имейте в виду, что, как уже упоминалось в этом потоке, свойство UButton AdjusttsImageWhenHighlighted влияет только на фоновое изображение.
ХамасN
23
button.adjustsImageWhenDisabled = NO;

в равной степени полезно иметь собственный вид отключенной кнопки.

Тим
источник
5

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

[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];

Если текст меняется, вы можете сделать

[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];

другие подобные функции:

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state

Димитрис
источник
setTitleColor - это все, что мне нужно, чтобы отключить подсветку текста
uibutton
3

Хорошо, вот простое решение, если это сработает для вас, после недели, потрясенной моей головой, мне наконец пришло в голову просто установить выделенное = НЕТ для 1-й строки метода IBAction для TouchUpInside или TouchDown, или как там работает. Для меня это было нормально на TouchUpInside.

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}
therealbuckley
источник
3

Для разработчиков Swifty -

yourButton.adjustsImageWhenHighlighted = false
iDeveloper
источник
3

Свифт 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false
yuanjilee
источник
2

только две вещи:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
Alok
источник
2

У меня была похожая проблема, и я обнаружил, что «снятие отметки» с «Очистки графического содержимого в конструкторе интерфейса» решило мою проблему

введите описание изображения здесь

Джефф
источник
2

Сделайте вашу кнопку Тип - «Пользовательский» и снимите флажок - Подсветка Настройте изображение, и все готово.

Khushboo
источник
-3

Во избежание установить UIButton в линию разлома на клип , использовать вместо стандартного Truncate Средний

введите описание изображения здесь

Янош
источник