У меня есть UIButton, который при выборе не должен менять состояние при прикосновении. По умолчанию он находится в UIControlStateHighlighted при прикосновении, и это меня злит.
Предложения?
У меня есть UIButton, который при выборе не должен менять состояние при прикосновении. По умолчанию он находится в UIControlStateHighlighted при прикосновении, и это меня злит.
Предложения?
Для вашей кнопки buttonType должно быть установлено значение Custom.
В IB вы можете снять галочку с «Выделение корректирует изображение».
Программно вы можете использовать theButton.adjustsImageWhenHighlighted = NO;
Аналогичные параметры доступны и для состояния «отключено».
В дополнение к приведенному выше ответу о снятии флажка «выделение регулирует изображение» в IB убедитесь, что тип кнопки установлен ПОЛЬЗОВАТЕЛЬСКИЙ.
Это сработает для вас:
[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];
3-я строка - это уловка ...
Это работает так же, как и установка изображения / фона.
adjustsImageWhenHighlighted UIButton, похоже, влияет только на фоновое изображение.
- person Michael Thiel; 07.05.2012
button.adjustsImageWhenDisabled = NO;
одинаково полезно для того, чтобы иметь собственный внешний вид отключенной кнопки.
В зависимости от того, что изменяется от состояния по умолчанию к выделенному состоянию кнопки, вы можете вызвать несколько методов, чтобы установить для них то, что вам нужно. Итак, если изображение изменится, вы можете сделать
[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];
Если текст изменится, вы можете сделать
[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];
другие аналогичные функции:
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state
- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state
Для разработчиков Swifty -
yourButton.adjustsImageWhenHighlighted = false
Swift 3+
button.adjustsImageWhenHighlighted = false
button.adjustsImageWhenDisabled = false
Хорошо, вот простое решение, если это сработает для вас, после недели ударов головой по этому поводу мне наконец пришло в голову просто установить выделенное = NO для 1-й строки метода IBAction для TouchUpInside или TouchDown, или того, что работает. На TouchUpInside у меня все было нормально.
-(IBAction)selfDismiss:(id)sender {
self.btnImage.highlighted = NO;
NSLog(@"selfDismiss");
etc, etc, etc.
}
сделайте вашу кнопку Тип - «Пользовательский» и снимите флажок - Отрегулируйте выделенное изображение, и все готово.
всего две вещи:
UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
избегайте установки Разрыва строки в UIButton на Обрезать, используйте вместо него стандартный Усечение по середине
