Подтвердить что ты не робот

Пользовательский UIButton не выделяется при касании

У меня есть метод, который создает пользовательский 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;
}

Как я могу сделать эти кнопки выделенными, как обычная прямоугольная кнопка?

4b9b3361

Ответ 1

В своем коде добавьте строку button.showsTouchWhenHighlighted = TRUE;

Ответ 2

Если кто-то все еще сталкивается с проблемой - вы должны создать 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:

Ответ 3

Вы можете создать свой собственный подкласс UIButton (тогда вы просто установите все свойства thoses в конструкторе).

И вы должны переопределить метод выделения UIButton

- (void)setHighlighted:(BOOL)highlighted {
    if (highlighted) {
        self.backgroundColor = [UIColor redColor];
    } else {
        self.backgroundColor = [UIColor blueColor];
    }
}

Ответ 4

Для 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
        }
    }

}

Ответ 5

Существует простой способ реализовать подсветку на пользовательской кнопке.  1. создать .png изображение для состояния выделения (с цветом, альфой и т.д.);  2. перейдите в свой значок .xib;  3. выберите Attributes Inspector справа от XCode;  4. установите State Config как выделенную  5. Установите изображение .png как фоновое изображение.  Добро пожаловать:)

Ответ 6

В раскадровке задано фоновое изображение кнопки и выделенное изображение. на действие кнопки напишите эту строку, то есть измените цвет кнопки на 1 секунду

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];