Ответ 1
Я нашел решение: нужно добавить строку сложения
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
Я установил изображения для состояний кнопок 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" не будет выбрано.
Я нашел решение: нужно добавить строку сложения
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
Это можно сделать в Interface Builder.
Выберите UIButton
, который вы хотите установить в IB
, затем перейдите к attributes inspector
.
В снимках экрана я использую настраиваемый тип кнопки, но это имеет значение не.
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])
Я думаю, что большинство плакатов здесь полностью упущены. У меня такая же проблема. Первоначальный вопрос касался состояния выделенной кнопки "Выделение" ( "КОМБИНИРОВАН ОБОИХ СОСТОЯНИЙ" ), которое невозможно установить в IB и возвращается к состоянию по умолчанию, когда происходит затемнение. Единственное рабочее решение, которое упоминалось в одном сообщении:
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
Если у вас есть все основания для этого, это сделает трюк
добавить следующие цели:
[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];
}
В быстром режиме вы можете:
button.setImage(UIImage(named: "selected"),
forState: UIControlState.selected.union(.highlighted))
В 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))
Исправьте меня, если я ошибаюсь. Выполняя
[button setSelected:YES];
вы явно меняете состояние выбранных кнопок. Поэтому, естественно, с помощью кода, который вы предоставили, будет показано, что для выбранного состояния в вашем случае checked.png
Если кому-то интересно, как это работает в 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)
Свифт 3+
button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])
ИЛИ ЖЕ
button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))
Это означает, что кнопка текущая в selected
состоянии, после чего вы ее касаетесь, показывает состояние highlight
.
У меня была проблема установки imageView.highlighted = NO;
(настройка ДА работала правильно, и изображение изменилось на выделенный).
Решение вызывало [imageView setHighlighted:NO];
Все работает правильно.
Если вы хотите позвонить из
[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;
}
}
Кредит выше Хорхе, но я немного улучшил его, давая полное рабочее решение
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);
Если вам нужен подсвеченный оттенок, который ОС предоставляет по умолчанию при нажатии и удерживании пользовательской кнопки для выбранного состояния, используйте этот подкласс UIButton. Написано в Swift 5:
import Foundation
import UIKit
class HighlightOnSelectCustomButton: UIButton {
override var isHighlighted: Bool {
didSet {
if (self.isSelected != isHighlighted) {
self.isHighlighted = self.isSelected
}
}
}
}