如何更改UIButton的背景图像?

问题描述:

我在我的应用程序中创建了数百个动态UIButtons。在创建这些UIButtons时,我给每一个标签。 我想要做的是能够在点击时更改UIButton的背景图像。 如果我有一个带有标签的UIButton,而不是如何更改UIButton的背景图片?如何更改UIButton的背景图像?

+1

你应该在提问之前做一点研究,这里有几百个博客覆盖了这个问题。 – NSAddict

试试这个

if(photo.tag==TagNum) [photo setBackgroundImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal]; 
+0

此代码给出警告“Class method'+ viewWithTag:'未找到(返回类型默认为'id')”此代码可以帮助我解决警告 – Vishal

+0

什么是照片?请提供更多信息。很短,并没有真正说出发生了什么。 – Popeye

+0

照片是您比较标签的按钮。 – Ahsan

您可以更改按钮图像按发件人标签一样:

-(IBAction)changeImage:(id)sender 

    { 
    [sender setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.png",[sender tag]]] forState:UIControlStateNormal]; 

    } 

,如果你有一个数组所有映像文件名,那么你可以如下执行。

-(IBAction)changeImage:(id)sender 

    { 
    [sender setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@.png",[MyImagearray ObjectAtindex:[sender tag]]]] forState:UIControlStateNormal]; 

    } 

如果这不是你想要的,然后正确指定你的问题。

希望它有帮助。

+0

只需将'[sender tag]'放在tagnum所在的位置,就可以缩短这个范围。然后整个事情就在一条线上。 – Popeye

+0

如果我有int变量中的标记比我怎么办?像例如我有“int x;”比我给x的价值x“x = 10;”现在我怎么能改变标签值为“x”的按钮的背景图像... – Vishal

+0

使用我的第一个方法'[发件人setImage:[UIImage imageNamed:[NSString stringWithFormat:@“%d.png”,[sender tag]] ] forState:UIControlStateNormal];' –

您可以使用此方法来更改按钮的背景图片:

[btn setBackgroundImage:(UIImage *) forState:(UIControlState)] 

你也应该通过this link

-(IBAction)btnclicked:(id)sender 

    { 

    int tag=sender.tag; 

    UIImage * newImage=[UIImage imageNamed:[NSString stringWithFormat:@"%d.png",tag]]; 
    [sender setBackgroundImage:newImage forState:UIControlStateNormal]; 

    } 

///This bellow line for Normal Image with button tag just put image with tag and add Normal. 
     [yourButton setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%dNormal.png",btnGo.tag]] forState:UIControlStateNormal]; 

///This bellow line for UIControlStateHighlighted Image with button tag just put image with tag and add Highlited. 
     [yourButton setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%dHighlited.png",btnGo.tag]] forState:UIControlStateHighlighted]; 

///This bellow line for UIControlStateSelected Image with button tag just put image with tag and add Selected. 

     [yourButton setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%dSelected.png",btnGo.tag]] forState:UIControlStateSelected]; 

,并在你的按钮点击方法只是将其设置为a selected ..

对于EX:

-(IBAction)btnClicked:(id)sender{ 
     UIButton *btn = (UIButton*)sender; 
     [btn setSelected:YES]; 

} 
+0

@Vishal这个代码是用于整个状态的,也是整个按钮与其单独的图像也放在这里的图像的静态名称,但它的工作看.. –

的方法有很多,当你点击一个按钮,但两个最好的办法将是没有把它变成一个switch statement像这样

- (IBAction)shouldChangeImage:(id)sender 
    { 
     switch([sender tag]) { 
      case 1: 
        [sender setBackgroundImage:[UIImage imageNamed:@"myFirstImage.png"] forState:UIControlStateNormal]; 
        break; 
      case 2: 
        [sender setBackgroundImage:[UIImage imageNamed:@"mySecondImage.png"] forState:UIControlStateNormal]; 
        break; 

      // And so on for each button tag and then have a default for those that are not listed. 

      default: 
        [sender setBackgroundImage:[UIImage imageNamed:@"myDefaultImage.png"] forState:UIControlStateNormal]; 
        break; 
     } 
    } 

这是不好的这是可以做到数百个按钮,但仍然有效。如果所有图像的命名完全不同,这也是最好的方法,但是如果您将图像命名为相同,并且只需使用可创建更高效​​代码的标签编号进行前缀,那么读起来会更容易。你会这样做。

- (IBAction)shouldChangeImage:(id)sender 
    { 
     [sender setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"myImage-%d.png",[sender tag]]] forState:UIControlStateNormal]; 
    } 

请注意整个事情是如何在一行上,因此这样更容易阅读,更高效。

你也可以使用else if statement,但如果你有几百个,我会推荐一种方式。

希望这会有所帮助

+0

他试图添加100个或更多的按钮,在这种情况下并不好。 –

+0

@SibaPrasadHota同意添加只是作为一个选项没有更多的,然后他可以让他的头脑使用哪一个。我总是喜欢给出一些方法来给这个人一个最适合他们的选择。尽管如此,我的确推荐了更短的路线 – Popeye