Ответ 1
В своем коде добавьте строку button.showsTouchWhenHighlighted = TRUE;
У меня есть метод, который создает пользовательский UIButton, который позволяет мне изменять цвет кнопки с помощью QuartzCore. Но кнопки не выделяются при касании.
- (UIButton *)makeHeaderButton {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIFont *textFont = [UIFont boldSystemFontOfSize:12];
UIColor *textColor = [UIColor colorWithRed:80/255.0 green:109/255.0 blue:145/255.0 alpha:1.0];
UIColor *backgroundColor = [UIColor colorWithRed:250/255.0 green:250/255.0 blue:250/255.0 alpha:1.0];
[button setTitleColor:textColor forState:UIControlStateNormal];
button.titleLabel.font = textFont;
button.autoresizesSubviews = YES;
button.layer.cornerRadius = 8;
button.layer.borderWidth = 1;
// next 2 properties set using QuartzCore class, no other way to set button colors
button.layer.borderColor = [UIColor grayColor].CGColor;
button.layer.backgroundColor = backgroundColor.CGColor;
button.clipsToBounds = YES;
return button;
}
Как я могу сделать эти кнопки выделенными, как обычная прямоугольная кнопка?
В своем коде добавьте строку button.showsTouchWhenHighlighted = TRUE;
Если кто-то все еще сталкивается с проблемой - вы должны создать UIButton следующим образом:
UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
btn.layer.cornerRadius = 4;
btn.layer.masksToBounds = YES;
[btn setTranslatesAutoresizingMaskIntoConstraints:NO];
[btn setBackgroundColor:[UIColor greenColor]];
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[btn setTitle:@"ok" forState:UIControlStateNormal];
*** any customisation that you would like ***
[parentView addSubview: btn];
Таким образом, у вас все еще есть iOS, заботясь обо всех выделениях. Главное - использовать
[UIButton buttonWithType:UIButtonTypeSystem];
Если вы используете initWithFrame или любой другой метод - вам придется реализовать
setTitleColor: forState:
setBackgroundImage: forState:
Вы можете создать свой собственный подкласс UIButton
(тогда вы просто установите все свойства thoses в конструкторе).
И вы должны переопределить метод выделения UIButton
- (void)setHighlighted:(BOOL)highlighted {
if (highlighted) {
self.backgroundColor = [UIColor redColor];
} else {
self.backgroundColor = [UIColor blueColor];
}
}
Для Swift создайте собственный класс, который наследует свойство UIButton
и переопределяет isHighlighted
:
class ButtonWithHighlight: UIButton {
override var isHighlighted: Bool {
get {
return super.isHighlighted
}
set {
if newValue {
backgroundColor = <#color when highlighted#>
}
else {
backgroundColor = <#color for normal state#>
}
super.isHighlighted = newValue
}
}
}
Существует простой способ реализовать подсветку на пользовательской кнопке. 1. создать .png изображение для состояния выделения (с цветом, альфой и т.д.); 2. перейдите в свой значок .xib; 3. выберите Attributes Inspector справа от XCode; 4. установите State Config как выделенную 5. Установите изображение .png как фоновое изображение. Добро пожаловать:)
В раскадровке задано фоновое изображение кнопки и выделенное изображение. на действие кнопки напишите эту строку, то есть измените цвет кнопки на 1 секунду
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];