Як відключити стан управління підсвічуванням UIButton?


147

У мене є UIButton, який при виборі не повинен змінювати стан при дотику. Поводження за замовчуванням полягає в тому, щоб воно було в UIControlStateHighlight під час дотику, і це мене злить.

Пропозиції?

Відповіді:


313

У вашій кнопці має бути buttonTypeвстановлено значення Custom.

У IB ви можете зняти прапорець "Виділити коригує зображення".

Програмно можна використовувати theButton.adjustsImageWhenHighlighted = NO;

Подібні параметри доступні і для стану "інвалідів".


1
Будь-який шанс вам знати, якою була б програмна версія цього? Зараз у мене це працює хакерно, роблячи його відключеним і одягаючи як обраний.
kbanman

99
uibutton.adjustsImageWhenHighlight = НІ;
Гайдн

43
Також переконайтесь, що для типу кнопки встановлено ЗАМОВНЕННЯ. (Як згадував Мосіб Асад в іншій відповіді)
Влад Лего

Чудово !!! просто невелика і очевидна зміна, яку я пропустив !!! Я встановив тип класу UIButton на MyCustomClass, але просив його змінити. Таким чином, це дало виділений ефект виділеної кнопки. Ще раз дякую
Вінод Супнекар

38

Окрім наведеної вище відповіді, зніміть прапорець "підсвічує коригує зображення" в IB, переконайтесь, що для кнопки встановлено тип CUSTOM.


2
Це був недолік: кнопка типу CUSTOM. Дякую!
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];

Третій рядок - хитрість тут ...

Це працює так само для встановлення image / backgroundImage


1
Це прекрасно працює для мене. adjustsImageWhenHighlightedВластивість , UIButtonздається, зачіпає тільки фонове зображення.
Майкл Тіль

Зверніть увагу, що якщо ви вирішите призначити зображення "відключеному стану", ви не зателефонуєте setBackgroundImage. Натомість слід зробити наступне [кнопка setImage: image forState: UIControlStateDisabled]; Також слід пам’ятати, що, як згадується в цій темі, властивість UPSutton відрегулюєImageWhenHighlight впливає лише на фонове зображення.
HamasN


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 на кліп , використовуйте замість цього стандартний посередницький посередник

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.