管理多个按下的UIButtons

问题描述:

我有一个uiviewcontroller与许多UIButtons的意思是被选中并保持按下,直到再次触及。我在viewDidLoad中定义每个按钮,让所有的人都在相同的选择方法(tapButton):管理多个按下的UIButtons

[button1 addTarget:self action:@selector(tapButton:) forControlEvents:UIControlEventTouchUpInside]; 
    [button2 addTarget:self action:@selector(tapButton:) forControlEvents:UIControlEventTouchUpInside]; 
    ... 

我想这样做,是在tabButton:方法,使用选择,以确定哪个按钮是按下,然后用下面的改变它的状态:

- (IBAction) tapButton:(id)sender 
{ 
    if (sender.selected) { 
    sender.highlighted = NO; 
    sender.selected = NO; 
} else { 
    sender.highlighted = YES; 
    sender.selected = YES; 
} 
} 

你会发现,这仅仅是一个pseuodo代码,因为我真的不能做“sender.selected”或“sender.highlighted”但是这就是我我正在努力完成。

有没有什么方法可以让我做到这一点?我不愿意创建30个“tapButton”方法(这就是我所拥有的UIButton的数量,是的...)来管理每个UIButton的状态。

非常感谢!

+0

为什么不能这样做' sender.selected'或'sender.highlighted'?他们是有效的...这正是发件人参数的意思(这是按下的按钮) – borrrden 2012-07-30 03:20:20

+0

我希望我能做到这一点,但我得到的错误......这将使我的生活变得如此简单! – moshikafya 2012-07-30 03:22:43

+0

“错误”...非常描述你。也许你的问题应该是关于那些错误呢?我一直以这种方式切换选择。 – borrrden 2012-07-30 03:25:02

您可以在选择

- (IBAction) tapButton:(id)sender 
{ 
    switch((UIButton*)sender.tag){ 
    case 1: 
    ..... 
    } 
} 
+0

好主意,我喜欢它,但希望找到更多“优雅”...... + 1的东西。 – moshikafya 2012-07-30 03:31:23

+0

继续找到,如果你知道,请让我知道:) – 2012-07-30 03:37:41

UIButton * selectedButton = [[UIButton allo]init]; 
/*for removing old highlight*/ 
selectedButton.higlighted = NO; 
selectedButton = sender; 
/*for setting new button highlight*/ sender.selected = YES 

上面的代码将帮助您设置每个按钮的tag这样

button1.tag = 1; 
button2.tag = 2; 
.... 

然后。我在这里使用新的按钮,存储最后一个按钮状态

+0

这段代码没有任何意义。您应该删除第一行,并在第二行使用'self.selectedButton.highlighted = NO'。 – borrrden 2012-07-30 05:32:24

+0

感谢borrrden为您的评论 – Vinodh 2012-07-30 05:35:51

您可以使用开关的情况下这个...或者你也可以通过使用alpha属性实现这个...

-(IBAction) tapButton:(id)sender 
{ 
    UIButton *btn = (UIButton *)sender; 
    if ([btn isSelected]) 
    { 
     btn.selected = NO; 
     btn.alpha = 0.5; 
    } else { 
     btn.selected = YES; 
     btn.alpha = 1; 
    } 
}