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

#iphone #objective-c #cocoa-touch #uibutton

#iPhone #objective-c #cocoa-touch #uibutton

Вопрос:

У меня UIButton есть, и я установил его с помощью:

 UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];

UIImage *imageNormal = [UIImage imageNamed:@"normal.png"];
UIImage *imageNormalHover = [UIImage imageNamed:@"normalHover.png"];
UIImage *imageSelected = [UIImage imageNamed:@"selected.png"];
UIImage *imageSelectedHover = [UIImage imageNamed:@"selectedHover.png"];

[myButton setImage:imageNormal forState:UIControlStateNormal];
[myButton setImage:imageSelected forState:UIControlStateSelected];

if (boolVar) {
    [myButton setSelected:YES];
    [myButton setImage:imageSelectedHover forState:UIControlStateHighlighted];
} else {
    [myButton setImage:imageNormalHover forState:UIControlStateHighlighted];
}
  

Проблема в том, что когда состояние нормальное, и я пытаюсь нажать кнопку, я вижу изображение правильно normalHover.png , но когда выбрано состояние, и я пытаюсь нажать кнопку, я вижу все еще normalHover.png , а не selectedHover.png . Кажется, что UIButton я не могу изменить выделенное изображение. Как вы решаете?

Ответ №1:

Вам нужно установить изображение для UIControlStateSelected | UIControlStateHighlighted объединенного состояния:

 [myButton setImage:imageSelectedHover forState:(UIControlStateSelected | UIControlStateHighlighted)];
  

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

Ответ №2:

В swift это делается с помощью union :

 myButton.setImage(imageSelectedHover, forState: UIControlState.Selected.union(UIControlState.Highlighted))