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

时间:2014-03-03 17:15:45

标签: ios iphone objective-c tags uibutton

我有一个叫做按钮的多个按钮阵列。每个都被标记。如何仅根据标签和标签更改按钮上的图像。截至目前,它只更改最后一个按钮。

    -(void)buttonTapped:(id)sender{

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

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

4 个答案:

答案 0 :(得分:1)

或者:

for (UIButton *btn in button) {
    if(btn.tag == 1)
    {
        // do something
        break; // don't need to run the rest of the loop
    }
}

如果你想使用数组(它不应该被称为'button',请使用复数形式的数组)

或更简单的方法:

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];
}

答案 1 :(得分:0)

如果您只想更改被点按的按钮,则以下操作应该有效。

   -(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

答案 2 :(得分:0)

在这种情况下,你真的不需要使用标签。调用IBAction时,sender参数是指向触发IBAction的控件的指针。 (你的按钮。)

因此,您已经有一个指向该按钮的指针。

所以,正如其他人所指出的那样,你的代码可以这样读:

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

请注意,我将发件人的类型更改为UIButton,因此您无需强制转换它。只要操作只连接到按钮,这样做是安全的,并使代码更清晰。

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

如果你想使用标签和一组按钮来做,你可以使用这样的代码:

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

答案 3 :(得分:0)

创建名称为button_change1.pngbutton_change2.png

的图片

-(void) buttonTapped:(UIButton*)sender
{
    NSString* imageName = [NSString stringWithFormat: @"button_change%ld.png", (long)sender.tag];
    [button setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
}