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

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

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

Ответ 1

Для вашей кнопки должно быть установлено buttonType Custom.

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

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

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

Ответ 2

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

Ответ 3

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

[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];

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

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

Ответ 4

adjustsImageWhenHighlighted = NO;

Ответ 5

button.adjustsImageWhenDisabled = NO;

одинаково полезен для вашего внешнего вида отключенной кнопки.

Ответ 6

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

[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

Ответ 7

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

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}

Ответ 8

Для Swifty Developer -

yourButton.adjustsImageWhenHighlighted = false

Ответ 9

Свифт 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false

Ответ 10

всего две вещи:

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

Ответ 11

У меня была аналогичная проблема, и я обнаружил, что "снятие флажка" очищает графический контент в построителе интерфейса, исправил мою проблему

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

Ответ 12

введите свою кнопку Тип - "Пользовательский" и Снимите флажок - Подчеркнуто Настроить изображение и вы закончили.

Ответ 13

избегайте устанавливать UIButton Разрыв строки на Клип, вместо этого используйте стандартный Truncate Middle

enter image description here