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


147

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

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

Ответы:


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.

}



2

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

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;

2

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

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


2

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


-3

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.