UIButton: установить изображение для выделенного выделенного состояния - PullRequest
154 голосов
/ 08 апреля 2011

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

мой код:

[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];

и нажмите кнопку, изображение "ressed.png "не выбирается.

Ответы [ 13 ]

228 голосов
/ 19 августа 2011

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

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
114 голосов
/ 30 мая 2013

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

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

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

Custom Default

enter image description here

enter image description here

28 голосов
/ 20 ноября 2015

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])
27 голосов
/ 08 августа 2013

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

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
11 голосов
/ 08 апреля 2011

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

, добавьте следующие цели:

[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];
}
7 голосов
/ 28 марта 2017

В 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))
6 голосов
/ 16 сентября 2015

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

button.setImage(UIImage(named: "selected"), 
                forState: UIControlState.selected.union(.highlighted))
2 голосов
/ 08 апреля 2011

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

   [button setSelected:YES];

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

1 голос
/ 08 февраля 2018

Swift 3 +

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

ИЛИ

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

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

1 голос
/ 24 августа 2015

Если кому-то интересно, как это работает в 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)
...