Я все еще не до конца понял ваш вопрос. Если вам нужно одно нормальное изображение для кнопки, а другое, когда пользователь касается кнопки, вы можете дать их непосредственно при создании самой кнопки. Не нужно менять изображение, когда кнопка нажмите ..
[cell.ansBtn1 setBackgroundImage:[UIImage imageNamed:@"option.png"] forState: UIControlStateNormal];
[cell.ansBtn1 setBackgroundImage:[UIImage imageNamed:@"option_green.png"] forState: UIControlStateHighlighted];
[cell.ansBtn2 setBackgroundImage:[UIImage imageNamed:@"option.png"] forState: UIControlStateNormal];
[cell.ansBtn2 setBackgroundImage:[UIImage imageNamed:@"option_green.png"] forState: UIControlStateHighlighted];
[cell.ansBtn3 setBackgroundImage:[UIImage imageNamed:@"option.png"] forState: UIControlStateNormal];
[cell.ansBtn3 setBackgroundImage:[UIImage imageNamed:@"option_green.png"] forState: UIControlStateHighlighted];
[cell.ansBtn4 setBackgroundImage:[UIImage imageNamed:@"option.png"] forState: UIControlStateNormal];
[cell.ansBtn4 setBackgroundImage:[UIImage imageNamed:@"option_green.png"] forState: UIControlStateHighlighted];
Поскольку вы использовали выделенное состояние кнопки, я предполагаю, что вы хотите, чтобы зеленое изображение отображалось только тогда, когда на кнопке находится пользовательская рука (т. Е. Переходите к обычному изображению, когда пользователь отпускает клавишу ...). В этом случае приведенный выше код будет работать. .
Но если вы хотите, чтобы изображение кнопки оставалось зеленым даже после выпуска пользователя, вам следует использовать свойство selected (UIControlStateSelected) UIButton.
Редактировать: увидев комментарий ..
В том случае, когда кнопка alloc и init дают только нормальное состояние изображения.
[cell.ansBtn setBackgroundImage:[UIImage imageNamed:@"option.png" forState:UIControlStateNormal]];
и при нажатии кнопки.
-(void)optionButtonClicked:(UIButton*)sender{
if(correct){
// green image..
[sender setBackgroundImage:[UIImage imageNamed:@"option_green.png"] forState:UIControlStateSelected];
}else{//red image
[sender setBackgroundImage:[UIImage imageNamed:@"option_red.png"] forState:UIControlStateSelected];
}
sender.selected = true;
}
Второе редактирование: после просмотра отредактированного вопроса
Первым делом, никогда не сравнивайте две строки, подобные этой.
if(str==[dictionary objectForKey:@"option1"])
Вместо этого сравните, используя функцию сравнения () или функцию isEqualToString ().
Во-вторых, вы используете " cell " в функции btnAction. Я не могу поверить, что во время компиляции не отображается ошибка « ячейка не объявлена ».
В-третьих, исправьте две ошибки.
В-четвертых, после исправления ошибки попробуйте отладить код с помощью точек останова. Вы уже пробовали это? Поместите точку останова в функцию btnAction и посмотрите, выполняется ли она так, как вы хотите. Затем обновите этот вопрос вашими наблюдениями. В настоящий момент в вашем коде так много ошибок, что я не могу сказать, какая именно причина ..До мне этот код вообще не должен быть скомпилирован ..
Третье редактирование: просто запоздалая мысль
попробуйте это ..
-(void) btnAction:(id) sender {
((UIButton*)sender).selected = FALSE;
NSString *str =((UIButton*)sender).titleLabel.text;
NSLog(@"%@",str);
NSLog(@"%@",[dictionary objectForKey:@"option3"]);
correctAns=[dictionary objectForKey:@"answer"];
if([str isEqualToString:([dictionary objectForKey:@"option1"])]){
selectedAns=@"1";
If ([selectedAns compare:correctAns]==NSOrderedSame) {
NSLog(@"this is correct");
[((UIButton*)sender) setBackgroundImage:[UIImage imageNamed:@"option_green.png"] forState:UIControlStateSelected];
countCorrect++;
// cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];
}else {
[((UIButton*)sender) setBackgroundImage:[UIImage imageNamed:@"option_red.png"] forState:UIControlStateSelected];
cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];
}
((UIButton*)sender).selected = true;
}
}
Четвертое редактирование: еще одна запоздалая мысль
-(void) btnAction:(id) sender {
NSString *str =((UIButton*)sender).titleLabel.text;
NSLog(@"%@",str);
NSLog(@"%@",[dictionary objectForKey:@"option3"]);
correctAns=[dictionary objectForKey:@"answer"];
if([str isEqualToString:([dictionary objectForKey:@"option1"])]){
selectedAns=@"1";
If ([selectedAns compare:correctAns]==NSOrderedSame) {
NSLog(@"this is correct");
[((UIButton*)sender) setImage:[UIImage imageNamed:@"option_green.png"] forState:UIControlStateNormal];
countCorrect++;
// cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];
}else {
[((UIButton*)sender) setImage:[UIImage imageNamed:@"option_red.png"] forState:UIControlStateNormal];
cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];
}
}
}