我的应用程序由几个按钮组成,当用户触摸其中一个按钮时,其下方会出现阴影,其余按钮不应该有任何背景图像,我需要像Instagram应用程序效果,这里是我的代码,但我的问题是当我触摸其他按钮时,阴影不会出现。
#define BGB [btn setBackgroundImage:[UIImage imageNamed:@"shadow.png"] forState:UIControlStateNormal]
#define _BGB [btn setBackgroundImage:nil forState:UIControlStateNormal]
- (IBAction)effectsPerform:(id)sender {
UIButton *btn = (UIButton *)sender;
if (btn == EB0) { BGB; } else { _BGB; }
if (btn == EB1) { BGB; } else { _BGB; }
if (btn == EB2) { BGB; } else { _BGB; }
//and other buttons ...
}
答案 0 :(得分:0)
尝试这种方式:
-(void)changeButton:(UIButton *)button background:(UIImage *)image
{
[button setBackgroundImage:image forState:UIControlStateNormal];
}
- (IBAction)effectsPerform:(UIButton *)sender
{
[self changeButton:sender background:(sender == EB0 || sender == EB1 || sender == EB2) ? [UIImage imageNamed:@"shadow.png"] : nil];
}
更新:
您可以在viewDidLoad:方法中使用另一种方法,对于您可以设置的每个按钮:
[button setBackgroundImage:nil forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"shadow.png"] forState:UIControlStateSelected];
然后在-(IBAction)effectsPerform:
- (IBAction)effectsPerform:(UIButton *)sender
{
button1.isSelected = (sender == button1);
button2.isSelected = (sender == button2);
....
}
...这样你就可以保证你只有一个选中的按钮。你可以做什么来优化你的代码是你可以子类化UIButton,并在init方法中调用后台setter方法,然后所有按钮都可以是这种类型(你可以通过设置它们的类在界面构建器中标记它们) - 这个这样你就不需要为每个按钮设置每个状态的背景图像。