iOS:我用标签设置我的UI按钮。如何根据其标签更改特定按钮图像?

iOS:我用标签设置我的UI按钮。如何根据其标签更改特定按钮图像?,ios,iphone,objective-c,tags,uibutton,Ios,Iphone,Objective C,Tags,Uibutton,我有一个称为button的多个按钮数组。每一个都有标签。如何根据按钮的标记和仅标记更改按钮上的图像。现在,它只更改最后一个按钮 -(void)buttonTapped:(id)sender{ NSLog (@"%i",[sender tag])]; [button setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal]; } 要么: fo

我有一个称为button的多个按钮数组。每一个都有标签。如何根据按钮的标记和仅标记更改按钮上的图像。现在,它只更改最后一个按钮

    -(void)buttonTapped:(id)sender{

     NSLog (@"%i",[sender tag])];

      [button setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
        }
要么:

for (UIButton *btn in button) {
    if(btn.tag == 1)
    {
        // do something
        break; // don't need to run the rest of the loop
    }
}
如果您想使用数组(不应称为“按钮”,请使用复数形式的数组)

或者更简单的方法:

UIButton *btn = (UIButton *)[self.view viewWithTag:1];
然而,更简单的方法是在回调中使用param(除非这不是您想要的按钮)。像这样:

-(void)buttonTapped:(id)sender
{
     UIButton *tappedBtn = (UIButton *)sender;
     [tappedBtn setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}

如果您只想更改被点击的按钮,那么下面的操作应该可以

   -(void)buttonTapped:(id)sender
   {
     NSLog (@"%i",[sender tag])];
     UIButton *tappedButton = (UIButton *)sender;
     [tappedButton setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
   }
如果要更改其他按钮,则可以使用

[self.view viewWithTag:1000]; //1000 is the tag you assigned

在这种情况下,您实际上不需要使用标记。调用iAction时,sender参数是指向触发iAction的控件的指针。(请按您的按钮。)

因此,您已经有了指向按钮的指针

因此,正如其他人所指出的,您的代码可以如下所示:

-(void)buttonTapped:(UIButton *)sender
{
  [sender setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}
-(void)buttonTapped:(UIButton *)sender
{
  NSUInteger tag = [sender tag];
  UIButton *aButton = buttons[tag];
  [aButton setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}
请注意,我将发件人的类型更改为UIButton,这样您就不必强制转换它。只要操作只连接到一个按钮,这样做是安全的,并使代码更干净

正如另一张海报所指出的,拥有一系列被称为“按钮”的按钮是不好的。我在下面的代码中将其重命名为“按钮”:

如果您想使用标记和一组按钮来完成,可以使用如下代码:

-(void)buttonTapped:(UIButton *)sender
{
  [sender setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}
-(void)buttonTapped:(UIButton *)sender
{
  NSUInteger tag = [sender tag];
  UIButton *aButton = buttons[tag];
  [aButton setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}

使用名称
按钮更改1.png
按钮更改2.png
等创建图像

以及:


无论如何,使用标签是一种非常糟糕的方法。别忘了标记最有帮助的答案和最有帮助的答案。面对同一问题的人会想知道,用不同的名字复制图像是一个非常糟糕的主意