我有一个叫做按钮的多个按钮阵列。每个都被标记。如何仅根据标签和标签更改按钮上的图像。截至目前,它只更改最后一个按钮。
-(void)buttonTapped:(id)sender{
NSLog (@"%i",[sender tag])];
[button setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}
答案 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.png
,button_change2.png
等
和
-(void) buttonTapped:(UIButton*)sender
{
NSString* imageName = [NSString stringWithFormat: @"button_change%ld.png", (long)sender.tag];
[button setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
}