0

我从 Interface Builder 添加了大约 20 个按钮,按下时它们会改变颜色,如下所示:

-(IBAction)button1:(id)sender
{
    if(playerTurn == YES)
    {
        button1.backgroundColor = [UIColor redColor];
    }
}

但是为了缩短事情,我似乎可以有一个通用的方法,这样每个按钮在按下时都会运行该方法。就像是:

-(IBAction)button1:(id)sender
{
    //Go to method and make this button red
}
-(void)changeColour
{
    if(playerTurn == YES)
    {
        buttonThatWasSent.backgroundColor = [UIColor redColor];
    }
}

不幸的是,我不知道该怎么做。似乎选择器/发件人是答案?但是我没有设法制作任何我找到的教程。

4

3 回答 3

2

你非常接近!

- (IBAction)myActionWithAnArbitraryName:(UIButton *)sender
{
    if(playerTurn == YES) {
        [sender setBackgroundColor:[UIColor redColor]];
    }
}
于 2012-12-15T14:58:02.327 回答
1

您可以链接单个操作的所有 20 个按钮。

发送者知道哪个按钮被按下,所以直接改变发送者的背景颜色。

-(IBAction)changeColour:(id)sender
{
    if (playerTurn == YES)
        sender.backgroundColor = [UIColor redColor];
}

注意:这是未经测试的代码。但我想它应该可以工作,如果他们不尝试这样做:

UIButton *button=(UIButton *)sender;
button.backgroundColor = [UIColor redColor];
于 2012-12-15T14:58:38.743 回答
1

实际上,您可以对所有按钮使用单个 IBAction,并将发送者转换为 UIButton:

- (IBAction)buttonPressed:(id)sender {
    UIButton *button = (UIButton *)sender;

    if (playerTurn == YES) {
        button.backgroundColor = [UIColor redColor];
    }
}
于 2012-12-15T15:01:22.840 回答