Выделенное состояние UIButton не отображается при нажатии на выбранный UIButton

Я хочу, чтобы мой UIButton отображал выделенное состояние, когда я нажимаю кнопку, которая уже выбрана.

В основном в выделенном состоянии я применяю изображение *.png в качестве фонового изображения UIButton, чтобы создать эффект нажатия.

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

Смотрите выпуск – > видео выпуска!

Помоги пожалуйста

//0    init UIButton
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(x, y, aSide, aSide)];

//1    Give it a backgroundColor
[button setBackgroundColor:aColor];

[..]

//2    Set titleLabel and its style
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
[button setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted];

UIImage *shadowImage = [UIImage imageNamed:kBtnShadow];
shadowImage = [shadowImage stretchableImageWithLeftCapWidth:floorf(shadowImage.size.width/2) topCapHeight:floorf(shadowImage.size.height/2)];

[button setBackgroundImage:shadowImage forState: UIControlStateHighlighted];

[button setTitle:aLabel forState:  UIControlStateNormal];

//3    Assign tag and Action
[button setTag:tag];
[button addTarget:target action:a forControlEvents:UIControlEventTouchUpInside];

person luca    schedule 03.06.2013    source источник


Ответы (4)


Различные состояния: UIControlStateNormal, UIControlStateSelected и (UIControlStateSelected | UIControlStateHighlighted) фактически различны. Если вы хотите, чтобы ваш shadowImage применялся как в (только) выделенном состоянии, так и в выделенном + выбранном состоянии, вы также должны установить:

[button setBackgroundImage:shadowImage forState:(UIControlStateHighlighted | UIControlStateSelected)]
person Aaron Golden    schedule 04.06.2013
comment
Благодарю Бога! ха-ха ^^ Я сходил с ума. И спасибо, конечно... Я также пробовал эту строку кода, но удалял строку для выделенного состояния, так как считал ее избыточной:/ - person luca; 04.06.2013
comment
Кажется, что даже если вы установите фоновое изображение для состояния, выбранного и выделенного в IB, вы получите выделенное системой изображение (темно-серое), когда для параметра AdjustsImageWhenHighlighted установлено значение YES (по умолчанию — YES) или обычное изображение. Поэтому необходимо закодировать ответ Аарона Голдена. - person tounaobun; 13.02.2015

В swift это будет:

button.setBackgroundImage(shadowImage, forState: UIControlState.Selected.union(UIControlState.Highlighted))
person Roland Keesom    schedule 05.10.2015

В Swift v3 (ноябрь 2016 г.):

button.setBackgroundImage(shadowImage, for: UIControlState.selected.union(UIControlState.highlighted))
person ICL1901    schedule 16.11.2016

Свифт 4.2

Применяется только программно.

aButton.setImage(UIImage(named: "your_image"), for: [.selected, .highlighted])
person Schiopu Evgheni    schedule 12.02.2019