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

Я установил изображения для состояний кнопок Normal, Highlighted и Selected, но когда кнопка в выбранном состоянии и я нажимаю/выделяю ее, я не видел свое выделенное изображение, а просто серое изображение. Можно ли установить изображение для выделенного состояния, когда выбрана кнопка?

мой код:

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

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

Ответ 1

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

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

Ответ 2

Это можно сделать в Interface Builder.

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

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

Custom Default

enter image description here

enter image description here

Ответ 3

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])

Ответ 4

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

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

Ответ 5

Если у вас есть все основания для этого, это сделает трюк

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

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

Ответ 6

В быстром режиме вы можете:

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

Ответ 7

В 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))

Ответ 8

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

   [button setSelected:YES];

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

Ответ 9

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

Ответ 10

Свифт 3+

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

ИЛИ ЖЕ

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

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

Ответ 11

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

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

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

Ответ 12

Если вы хотите позвонить из

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

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

Ответ 13

Xamarin С#

Битовое ИЛИ не работает по какой-то причине

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);

Ответ 14

Если вам нужен подсвеченный оттенок, который ОС предоставляет по умолчанию при нажатии и удерживании пользовательской кнопки для выбранного состояния, используйте этот подкласс UIButton. Написано в Swift 5:

import Foundation
import UIKit
class HighlightOnSelectCustomButton: UIButton {
    override var isHighlighted: Bool {
        didSet {
            if (self.isSelected != isHighlighted) {
                self.isHighlighted = self.isSelected
            }
        }
    }
}