Как отключить состояние управления подсветкой UIButton? - PullRequest
135 голосов
/ 14 февраля 2010

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

Предложения

Ответы [ 13 ]

284 голосов
/ 14 февраля 2010

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

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

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

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

37 голосов
/ 05 января 2014

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

34 голосов
/ 09 августа 2011

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

[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

26 голосов
/ 31 мая 2012
adjustsImageWhenHighlighted = NO;
22 голосов
/ 04 февраля 2011
button.adjustsImageWhenDisabled = NO;

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

4 голосов
/ 14 февраля 2010

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

[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

3 голосов
/ 08 февраля 2018

Swift 3 +

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false
3 голосов
/ 03 ноября 2016

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

yourButton.adjustsImageWhenHighlighted = false
3 голосов
/ 20 июля 2010

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

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}
2 голосов
/ 13 января 2017

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

...