3

私のアプリケーションはいくつかのボタンで構成されており、ユーザーがそのうちの 1 つに触れるとその下に影が表示され、残りのボタンには背景画像がありません。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 ...
}
4

1 に答える 1

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);
    ....
}

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

于 2012-05-04T08:52:34.953 に答える