【问题标题】:iOS: I set my uibuttons with tags. How do I change the specific button image based on its tag?iOS:我用标签设置了我的 uibuttons。如何根据标签更改特定按钮图像?
【发布时间】:2014-03-03 17:15:44
【问题描述】:

我有一个称为按钮的多个按钮数组。每一个都被标记。如何仅根据其标签和标签更改按钮上的图像。截至目前,它只更改最后一个按钮。

    -(void)buttonTapped:(id)sender{

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

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

【问题讨论】:

  • 不管怎样,使用标签是一种非常糟糕的方法。
  • 不要忘记标记最佳答案并为对您有帮助的答案投票。面临同样问题的人会想知道是什么解决了它

标签: ios iphone objective-c tags uibutton


【解决方案1】:

要么:

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

然而,更简单的方法是在回调中使用参数(除非那不是您想要的按钮)。像这样:

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

【讨论】:

    【解决方案2】:

    如果您只想更改被点击的按钮,以下应该可以工作。

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

    【讨论】:

      【解决方案3】:

      在这种情况下,您实际上不需要使用标签。当调用 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];
      }
      

      【讨论】:

        【解决方案4】:

        创建名称为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];
        }
        

        【讨论】:

        • 拥有不同名称的重复图像是一个非常糟糕的主意
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-03
        • 2015-12-11
        相关资源
        最近更新 更多