Iphone 管理多个按下的按钮

Iphone 管理多个按下的按钮,iphone,objective-c,ios,xcode,uibutton,Iphone,Objective C,Ios,Xcode,Uibutton,我有一个uiviewcontroller,它有许多UIButton,可以选择并一直按下,直到再次按下为止。我在viewDidLoad中定义每个按钮,并为它们提供相同的选择器方法(tapButton): 我想做的是,在tabButton:method中,使用选择器确定按下了哪个按钮,然后使用以下命令更改其状态: - (IBAction) tapButton:(id)sender { if ( sender.selected ) { sender.highlighted = NO;

我有一个uiviewcontroller,它有许多UIButton,可以选择并一直按下,直到再次按下为止。我在viewDidLoad中定义每个按钮,并为它们提供相同的选择器方法(tapButton):

我想做的是,在tabButton:method中,使用选择器确定按下了哪个按钮,然后使用以下命令更改其状态:

- (IBAction) tapButton:(id)sender
{
  if ( sender.selected ) {
    sender.highlighted = NO;
    sender.selected = NO;
} else {
    sender.highlighted = YES;
    sender.selected = YES;
}
}
您会注意到,这只是一个伪代码,因为我不能真正执行“sender.selected”或“sender.highlighted”,但这正是我试图实现的

我有什么办法可以做到这一点吗?我不想创建30个“tapButton”方法(这是我拥有的UIButton的数量,是的…)来管理每个UIButton的状态


非常感谢

您可以像这样设置每个按钮的
标签

button1.tag = 1;
button2.tag = 2;
....
然后在你的选择器中

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

上面的代码将帮助您。这里我使用新按钮来存储最后一个按钮状态

您可以使用开关盒来实现此功能…或者您也可以使用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;
    }
}

为什么不能执行
sender.selected
sender.highlighted
??它们是有效的…这正是发件人参数的目的(它是按下的按钮),我希望我可以这样做,但我得到了错误…这会让我的生活变得更轻松!“错误”…非常能描述你。也许你的问题应该是关于这些错误?我一直以这种方式切换选择。不,唯一可以自动更改的是标题、标题字体颜色、标题字体阴影颜色、图像和背景图像。其他任何操作都必须手动完成。您是否已经尝试了以下操作:好主意,我喜欢它,但希望找到更“优雅”的东西…+1。继续查找,如果您得到它,请让我知道:)此代码没有意义。您应该删除第一行,并在第二行使用
self.selectedButton.highlighted=NO
UIButton * selectedButton = [[UIButton allo]init];
/*for removing old highlight*/
selectedButton.higlighted = NO;
selectedButton = sender;
/*for setting new button highlight*/ sender.selected = YES
-(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;
    }
}