2012-05-04 127 views
3

我的應用程序由幾個按鈕組成,當用戶觸摸其中一個陰影出現在它們下面時,其餘按鈕應該沒有任何背景圖像,我需要類似Instagram應用程序效果的東西,這裏是我的代碼,但我的問題是當我觸摸其他按鈕的陰影不會出現。UIButton禁用並啓用背景圖像

#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

試試這個方法:

-(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: 你有另一種方法做它,在你的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方法中,然後所有的按鈕都可以是這種類型的(你可以通過設置類來標記它們) - 這個你不需要爲每個按鈕的每個狀態設置背景圖像。

+0

謝謝,但像之前的作品,其他觸摸每個按鈕後,陰影不會移動到選定的按鈕,這意味着所有按鈕的影子出現 –

+0

任何答案?... –

+0

看看我做的更新在我的帖子上... – graver