2012-05-04 21 views
3

私のアプリケーションはいくつかのボタンで構成されていますが、そのうちの1つをタッチするとその下に影が表示され、残りのボタンには背景画像がありません。私のコードですが、私の問題は、影が現れない他のボタンに触れたときです。UIButton無効にして背景画像を有効にする

-(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]; 
} 


UPDATE:

#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

この方法を試してみてください あなたは別のアプローチでそれを行う、あなたの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); 
    .... 
} 

...この方法では、選択したボタンが1つしかないことが保証されます。コードを最適化するためにできることは、UIButtonをサブクラス化することができ、バックグラウンドセッターメソッドを呼び出すinitメソッドで使用できます。すべてのボタンは、このタイプにすることができます(クラスを設定することによってインターフェースビルダーでマークすることができます)。あなたはすべてのボタンのすべての状態の背景画像を設定する必要はありません。

+0

他のボタンに触れてから、選択したボタンに影が移動しないようにしていただきありがとうございます。 –

+0

の回答はありますか? –

+0

私が作ったアップデートを見てください私のポストに... – graver

関連する問題