Iphone ui按钮禁用和启用背景图像

Iphone ui按钮禁用和启用背景图像,iphone,objective-c,ios,xcode,ipad,Iphone,Objective C,Ios,Xcode,Ipad,我的应用程序由几个按钮组成,当用户触摸其中一个按钮时,按钮下方会出现阴影,其余按钮不应有任何背景图像,我需要类似Instagram应用程序效果的东西,这是我的代码,但我的问题是,当我触摸其他按钮时,阴影不会出现 #define BGB [btn setBackgroundImage:[UIImage imageNamed:@"shadow.png"] forState:UIControlStateNormal] #define _BGB [btn setBackgroundImage:nil f

我的应用程序由几个按钮组成,当用户触摸其中一个按钮时,按钮下方会出现阴影,其余按钮不应有任何背景图像,我需要类似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 ...
}
试着这样做:

-(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:method中,为您可以设置的每个按钮:

[button setBackgroundImage:nil forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"shadow.png"] forState:UIControlStateSelected];
然后在您的
-(iAction)效应表单中:

- (IBAction)effectsPerform:(UIButton *)sender 
{
    button1.isSelected = (sender == button1);
    button2.isSelected = (sender == button2);
    ....
}

…通过这种方式,您可以保证只选择一个按钮。要优化代码,您可以将UIButton子类化,在init方法中调用后台setter方法,然后所有按钮都可以是这种类型(您可以通过设置它们的类在interface builder中标记它们)-这样,您就不需要为每个按钮的每个状态设置背景图像。

谢谢,但工作原理与以前一样,触摸每个按钮后,阴影不会移动到所选按钮,这意味着阴影会出现在所有按钮上