it-roy-ru.com

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

Я установил изображения для состояний кнопки «Обычный», «Выделенный» и «Выбранный», но когда кнопка в выбранном состоянии и я нажимаю/выделяю ее, я не вижу свое выделенное изображение, а только изображение в сером цвете…. Можно ли установить изображение для выделенное состояние при нажатии кнопки?

мой код:

[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];

когда я делаю:

[button setSelected:YES];

и нажмите кнопку, изображение «selected.png» не выбирает.

149
user478681

Я нашел решение: нужно добавить дополнительную строку

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
226
user478681

Вы можете сделать это в Интерфейсном Разработчике.

Выберите UIButton, который вы хотите установить в IB, затем перейдите к attributes inspector.

На снимках экрана я использую пользовательский тип кнопки, но это не имеет значения .

Custom Default

enter image description here

enter image description here

113
Ríomhaire

Я думаю, что большинство постеров здесь полностью упускают из виду. У меня такая же проблема. Первоначальный вопрос был о выделенном состоянии выбранной кнопки (КОМБИНИРОВАНИЕ ОБОИХ СОСТОЯНИЙ), которая не может быть установлена ​​в IB и возвращается к состоянию по умолчанию с некоторым затемнением. Единственное рабочее решение, как упоминалось в одном посте:

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
27
alghanor

Swift 3

// Default state (previously `.Normal`)
button.setImage(UIImage(named: "image1"), for: [])

// Highlighted
button.setImage(UIImage(named: "image2"), for: .highlighted)

// Selected
button.setImage(UIImage(named: "image3"), for: .selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), for: [.selected, .highlighted])

Чтобы установить фоновое изображение, мы можем использовать setBackgroundImage(_:for:)

Swift 2.x

// Normal
button.setImage(UIImage(named: "image1"), forState: .Normal)

// Highlighted
button.setImage(UIImage(named: "image2"), forState: .Highlighted)

// Selected
button.setImage(UIImage(named: "image3"), forState: .Selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), forState: [.Selected, .Highlighted])
26
kvothe

Если у вас есть веская причина для этого, это поможет

добавить эти цели:

[button addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(buttonTouchUp:) forControlEvents:UIControlEventTouchUpInside];


-(void)buttonTouchDown:(id)sender{
    UIButton *button=(UIButton *)sender;
    if(button.selected){
        [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateNormal];
    }
}

-(void)buttonTouchUp:(id)sender{
    UIButton *button=(UIButton *)sender;
    [button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
}
11
Jorge

В Swift 3.x вы можете установить подсвеченное изображение, когда кнопка выбрана следующим образом:

// Normal state
button.setImage(UIImage(named: "normalImage"), for: .normal) 

// Highlighted state (before button is selected)
button.setImage(UIImage(named: "pressedImage"), for: .highlighted)

// Selected state
button.setImage(UIImage(named: "selectedImage"), for:  .selected)

// Highlighted state (after button is selected)
button.setImage(UIImage(named: "pressedAfterBeingSelectedImage"), 
                for:  UIControlState.selected.union(.highlighted))
7
Ashish Verma

В Swift вы можете сделать:

button.setImage(UIImage(named: "selected"), 
                forState: UIControlState.selected.union(.highlighted))
5
Roland Keesom

Поправь меня, если я ошибаюсь. При выполнении

   [button setSelected:YES];

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

2
visakh7

Если кому-то интересно, как это работает в Swift, вот мое решение:

button.setImage("normal.png", forState: .Normal)
button.setImage("highlighted.png", forState: .Highlighted)
button.setImage("selected.png", forState: .Selected)

var selectedHighLightedStates: UIControlState = UIControlState.Highlighted
selectedHighLightedStates = selectedHighLightedStates.union(UIControlState.Selected)
button.setImage("selectedHighlighted.png", forState: selectedHighLightedStates)
1
basedgod

У меня были проблемы с настройкой imageView.highlighted = NO; (НастройкаДАработала правильно, и изображение изменилось на выделенное). 

Решение вызывало [imageView setHighlighted:NO];

Все работало правильно.

0
DrArt

Свифт 3+

button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])

ИЛИ ЖЕ

button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))

Это означает, что кнопка, текущая в состоянии selected, затем вы ее касаетесь, показывает состояние highlight.

0
yuanjilee

Xamarin C #

Битовое выполнение OR по какой-то причине не работает

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected | UIControlState.Highlighted | UIControlState.Focused);

Следующие работы

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Highlighted);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Focused);
0
Pierre

Откуда вы хотите позвонить 

[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];

Метод: 

-(void)test:(id)sender{
    UIButton *button=(UIButton *)sender;
    if (_togon){
      [button setTitleColor:UIColorFromRGB(89,89, 89) forState:UIControlStateNormal];
      _togon=NO;
    }
    else{
      [button setTitleColor:UIColorFromRGB(28, 154, 214) forState:UIControlStateNormal];
      _togon=YES;
    }
}

Кредит выше Хорхе, но я немного его улучшил, дав полное рабочее решение 

0
Kingsley Mitchell