简体   繁体   中英

UIButton : Background Image setting Issue when button state is highlighted?

I have an UIButton, I need to change button's image when button is tapped. Button's background images are set in ViewDidLoad method. Pls refer images attached on this thread.

  1. When I tap on button first time, button property will be changed to selected and "arrow_right.png" image will be set to our Button.

在此处输入图片说明

2.On second tap, I observed that when button state is highlighted, But it's background image is not setting. You can see some blur effect instead.

在此处输入图片说明

My concern is I saw while toggling UIButton, image is not getting set for highlighted state. when button's state changing from Selected to Normal. Is it a bug or my mistake?

Thank you.

- (void)viewDidLoad
{
  [super viewDidLoad];

  [testButton setBackgroundImage:[UIImage imageNamed:@"btn_normal.png"] forState:UIControlStateNormal];
  [testButton setBackgroundImage:[UIImage imageNamed:@"btn_pressed.png"] forState:UIControlStateSelected];
  [testButton setBackgroundImage:[UIImage imageNamed:@"btn_pressed.png"] forState:UIControlStateHighlighted];

}
- (IBAction)buttonPressed:(id)sender 
{
  UIButton *button = (UIButton*)sender;
  button.selected = !button.selected;

  if (button.selected)
  {
      [button setImage:[UIImage imageNamed:@"arrow_right.png"] forState:UIControlStateNormal];
      [button setImage:[UIImage imageNamed:@"arrow_right.png"] forState:UIControlStateHighlighted];
      [button setImage:[UIImage imageNamed:@"arrow_right.png"] forState:UIControlStateSelected];
  }
  else
  {
      [button setImage:[UIImage imageNamed:@"arrow_left.png"] forState:UIControlStateNormal];
      [button setImage:[UIImage imageNamed:@"arrow_left.png"] forState:UIControlStateHighlighted];
      [button setImage:[UIImage imageNamed:@"arrow_left.png"] forState:UIControlStateSelected];
  }
}

try this

- (IBAction)buttonPressed:(id)sender 
{
  UIButton *button = (UIButton*)sender;
 if(button.selected) {
 [button setSelected:NO]
} else {
 [button setSelected:YES]
}

}

i diddn't understand why you need to set image again, all you need to do is set its selected property , button will behave as you expected

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM