У меня есть UIButton, который при выборе не должен изменять состояние при касании. Поведение по умолчанию заключается в том, что он будет находиться в UIControlStateHighlighted при касании, и это вызывает у меня возмущение.
Предложения?
У меня есть UIButton, который при выборе не должен изменять состояние при касании. Поведение по умолчанию заключается в том, что он будет находиться в UIControlStateHighlighted при касании, и это вызывает у меня возмущение.
Предложения?
Для вашей кнопки должно быть установлено buttonType
Custom.
В IB вы можете снять флажок "Подсветка настраивает изображение".
Программно вы можете использовать theButton.adjustsImageWhenHighlighted = NO;
Аналогичные параметры доступны и для "отключенного" состояния.
В дополнение к вышеприведенному ответу на снятие отметки "подсветка регулирует изображение" в IB, убедитесь, что тип кнопки установлен CUSTOM.
Это будет работать для вас:
[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];
Третья строка - это трюк здесь...
Это работает одинаково для установки изображения/backgroundImage
adjustsImageWhenHighlighted = NO;
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
Хорошо, вот это простое решение, если это сработает для вас, после того, как через неделю ударило головой об этом, мне, наконец, пришло в голову просто установить выделенное = НЕТ для первой линии метода IBAction для TouchUpInside или TouchDown или любого другого работает. Для меня это было хорошо на TouchUpInside.
-(IBAction)selfDismiss:(id)sender {
self.btnImage.highlighted = NO;
NSLog(@"selfDismiss");
etc, etc, etc.
}
Для Swifty Developer -
yourButton.adjustsImageWhenHighlighted = false
Свифт 3+
button.adjustsImageWhenHighlighted = false
button.adjustsImageWhenDisabled = false
всего две вещи:
UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
У меня была аналогичная проблема, и я обнаружил, что "снятие флажка" очищает графический контент в построителе интерфейса, исправил мою проблему
введите свою кнопку Тип - "Пользовательский" и Снимите флажок - Подчеркнуто Настроить изображение и вы закончили.
избегайте устанавливать UIButton Разрыв строки на Клип, вместо этого используйте стандартный Truncate Middle