我有一个名为button的多个按钮数组。每一个都有标签。如何仅根据标记和标记更改按钮上的图像。到目前为止,它只改变了最后一个按钮。
-(void)buttonTapped:(id)sender{
NSLog (@"%i",[sender tag])];
[button setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}发布于 2014-03-04 01:18:50
以下任一项:
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];然而,更简单的方法是在回调中使用参数(除非这不是你想要的按钮)。如下所示:
-(void)buttonTapped:(id)sender
{
UIButton *tappedBtn = (UIButton *)sender;
[tappedBtn setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}发布于 2014-03-04 01:20:09
如果你只是想改变被点击的按钮,下面的方法应该可以。
-(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发布于 2014-03-04 01:51:07
在这种情况下,您实际上不需要使用标记。调用IBAction时,发送器参数是指向触发IBAction的控件的指针。(您的按钮。)
因此,您已经有了指向该按钮的指针。
因此,正如其他人所指出的,您的代码可能如下所示:
-(void)buttonTapped:(UIButton *)sender
{
[sender setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}请注意,我将发送器的类型更改为UIButton,这样您就不必强制转换它。只要操作只连接到一个按钮,这样做是安全的,并使代码更干净。
正如另一张海报所指出的那样,拥有一组称为"button“的按钮是不好的。在下面的代码中,我将其重命名为“button”:
如果你想使用标签和一组按钮,你可以使用如下代码:
-(void)buttonTapped:(UIButton *)sender
{
NSUInteger tag = [sender tag];
UIButton *aButton = buttons[tag];
[aButton setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}https://stackoverflow.com/questions/22152999
复制相似问题