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

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

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


person kbanman    schedule 14.02.2010    source источник
comment
Вы должны медитировать :-P   -  person Maneesh M    schedule 15.12.2020


Ответы (12)


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

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

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

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

person Haydn    schedule 14.02.2010
comment
Есть ли шанс, что вы знаете, какой будет программная версия этого? Прямо сейчас я заставил его работать хакерски, отключив его и переодев в выбранный. - person kbanman; 17.02.2010
comment
uibutton.adjustsImageWhenHighlighted = NO; - person Haydn; 20.02.2010
comment
Также убедитесь, что тип кнопки установлен на ПОЛЬЗОВАТЕЛЬСКИЙ. (Как упомянул Мосиб Асад в другом ответе) - person Vlad Lego; 30.07.2014
comment
Здорово!!! просто небольшое и очевидное изменение, которое я пропустил !!! Я установил тип класса UIButton на MyCustomClass, но забыл изменить его. Таким образом, это давало эффект выделения невыбранной кнопки. Еще раз, спасибо. - person Vinod Supnekar; 04.05.2017

В дополнение к приведенному выше ответу о снятии флажка «выделение регулирует изображение» в IB убедитесь, что тип кнопки установлен ПОЛЬЗОВАТЕЛЬСКИЙ.

person Mosib Asad    schedule 05.01.2014
comment
Это был недостающий элемент: кнопка типа ПОЛЬЗОВАТЕЛЬСКАЯ. Спасибо! - person JOM; 22.04.2015
comment
Что, если я хочу сохранить как системный UIButton? нельзя убрать выделение, регулирует изображение? - person Amjad Husseini; 16.08.2017

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

[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-я строка - это уловка ...

Это работает так же, как и установка изображения / фона.

person Manish Ahuja    schedule 09.08.2011
comment
Это работает идеально для меня. Свойство adjustsImageWhenHighlighted UIButton, похоже, влияет только на фоновое изображение. - person Michael Thiel; 07.05.2012
comment
Имейте в виду, что если вы решите присвоить изображению «отключенное состояние», вы не вызываете setBackgroundImage. Вместо этого вы должны сделать следующее [button setImage: image forState: UIControlStateDisabled]; Также имейте в виду, что, как упоминается в этом потоке, свойство UIButton adjustsImageWhenHighlighted влияет только на фоновое изображение. - person HamasN; 22.07.2013
comment
на этот замечательный ответ следует ссылаться, если ваша цель - удалить состояние выделения элемента управления, а не только удалить эффект выделения при щелчке - person ximmyxiao; 30.10.2020

button.adjustsImageWhenDisabled = NO;

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

person Tim    schedule 04.02.2011

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

[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

person Dimitris    schedule 14.02.2010
comment
setTitleColor - это все, что мне нужно, чтобы отключить выделение текста uibutton - person atulkhatri; 03.09.2014

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

yourButton.adjustsImageWhenHighlighted = false
person iDeveloper    schedule 03.11.2016

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false
person yuanjilee    schedule 08.02.2018

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

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}
person therealbuckley    schedule 20.07.2010

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

person Khushboo    schedule 13.01.2017

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

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
person maddy    schedule 22.01.2015

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

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

person Jeff    schedule 22.01.2016

избегайте установки Разрыва строки в UIButton на Обрезать, используйте вместо него стандартный Усечение по середине

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

person János    schedule 28.01.2014