Изменение цвета фона UIButton - PullRequest
7 голосов
/ 16 марта 2012

Я создаю кнопки программно.Я хочу изменить цвет фона кнопки при повторном подкрашивании, после поднятия пальца он должен вернуться к своему обычному цвету .....

nine = [UIButton buttonWithType:UIButtonTypeCustom];
[nine setFrame:CGRectMake(15, 105, 65, 40)];
[nine setTitle:@"9" forState:UIControlStateNormal];
[nine setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[nine setBackgroundColor:[UIColor cyanColor]];
[nine addTarget:self action:@selector(clickDigit:) forControlEvents:UIControlEventTouchUpInside];
[nine addTarget:self action:@selector(changeButtonBackGroundColor:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:nine];

// для изменения цвета фона

-(void)changeButtonBackGroundColor:(id) sender
{
    [nine setBackgroundColor:[UIColor redColor]];
}

Здесь был создан метод changeBackgroundColor для изменения цвета этой кнопки.это меняет цвет.

Ответы [ 2 ]

14 голосов
/ 16 марта 2012

Не знаю, относится ли это к вашему вопросу, но: это

[nine setBackgroundColor:[UIColor redColor]];

должно быть

[sender setBackgroundColor:[UIColor redColor]];

Редактировать: Изменить

[nine addTarget:self action:@selector(changeButtonBackGroundColor:) forControlEvents:UIControlEventTouchUpInside];

на

[nine addTarget:self action:@selector(changeButtonBackGroundColor:) forControlEvents:UIControlEventTouchDown];
[nine addTarget:self action:@selector(resetButtonBackGroundColor:) forControlEvents:UIControlEventTouchUpInside];
[nine addTarget:self action:@selector(resetButtonBackGroundColor:) forControlEvents:UIControlEventTouchUpOutside];
[nine addTarget:self action:@selector(resetButtonBackGroundColor:) forControlEvents:UIControlEventTouchCancel];

и добавьте метод:

- (void)resetButtonBackGroundColor: (UIButton*)sender {
    [sender setBackgroundColor:[UIColor cyanColor]];
}
3 голосов
/ 16 марта 2012

Я думаю, у вас есть два варианта ..

Первый:

Вы можете поместить [девять setBackgroundColor: [UIColor redColor]]; внутри "clickDigit" (и, как dasdom сказал переименовать в sender и изменить на (UIButton *) sender) ..

Изменение

[nine addTarget:self action:@selector(changeButtonBackGroundColor:) forControlEvents:UIControlEventTouchUpInside];

до

[nine addTarget:self action:@selector(changeButtonBackGroundColor:) forControlEvents:UIControlEventTouchUpOutside];

и метод "changeButtonBackGroundColor"

[sender setBackgroundColor:[UIColor cyanColor]];

Второй

создание универсальных событий UIControlEvents

[nine addTarget:self action:@selector(changeButtonBackGroundColor:) forControlEvents:UIControlEventAllEvents];

-(void)changeButtonBackGroundColor:(UIButton*) sender{
if ([sender.backgroundColor isEqual:[UIColor redColor]]){
    [sender setBackgroundColor:[UIColor cyanColor]];
}else{
    [sender setBackgroundColor:[UIColor redColor]];        
}}

Я не пробовал этот код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...