2012-05-04 3 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

Смежные вопросы