2012-12-21 119 views
-2

我在我的應用程序中創建了數百個動態UIButtons。在創建這些UIButtons時,我給每一個標籤。 我想要做的是能夠在點擊時更改UIButton的背景圖像。 如果我有一個帶有標籤的UIButton,而不是如何更改UIButton的背景圖片?如何更改UIButton的背景圖像?

+1

你應該在提問之前做一點研究,這裏有幾百個博客覆蓋了這個問題。 – NSAddict

回答

-1

試試這個

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

此代碼給出警告「Class method'+ viewWithTag:'未找到(返回類型默認爲'id')」此代碼可以幫助我解決警告 – Vishal

+0

什麼是照片?請提供更多信息。很短,並沒有真正說出發生了什麼。 – Popeye

+0

照片是您比較標籤的按鈕。 – Ahsan

1

您可以更改按鈕圖像按發件人標籤一樣:

-(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];' –

0

您可以使用此方法來更改按鈕的背景圖片:

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

你也應該通過this link

0
-(IBAction)btnclicked:(id)sender 

    { 

    int tag=sender.tag; 

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

    } 
0
///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這個代碼是用於整個狀態的,也是整個按鈕與其單獨的圖像也放在這裏的圖像的靜態名稱,但它的工作看.. –

1

的方法有很多,當你點擊一個按鈕,但兩個最好的辦法將是沒有把它變成一個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