2011-08-08 19 views
0

我有大約10個名爲pop1到pop10的UIImageView控件。在XCODE中使用字符串引用UIImageView控件

我在UIImageView上有10個按鈕。所述按鈕具有從1到10,所以我知道正被按下的按鈕「標籤」:

UIButton * aButton =(UIButton *)sender; 
aButton.tag - gives me the tag 

我要引用的按鈕下的UIImageView改變其圖像時,它上面的按鈕被按下:

UIImage *image = [UIImage imageNamed: @"NewImage.png"]; 
[pop1 setImage:image]; 

但是在上面的代碼我不想硬編碼「POP1」或「POP2」等我想用按鈕標籤

NSString *img = [NSString stringWithFormat:@"pop%d",aButton.tag]; 

給我「POP1」建立一個字符串或「pop2」等,因爲我正在使用aButton.tag。

因此,如何使用此信息如何編寫代碼以引用UIImage以更改其圖像?

在他行的「POP1」需要進行更改,以便它使用內置的字符串 - IMG:

[pop1 setImage:image]; 

我不想不得不在每個標籤作爲日後鍵入一個switch語句我打算添加大量這樣的控件,這不是一個選項。

有沒有辦法或有什麼其他方法可以使用?

更新

我試圖通過約翰在像這樣的代碼

-(IBAction)pop:(id)sender{ 
    UIButton * aButton =(UIButton *)sender; 
    NSLog(@"clicked button with TAG %d",aButton.tag); 

    if (aButton.tag > 0) { 
    UIImageView *img = (UIImageView *)[self.view viewWithTag:aButton.tag]; 

    UIImage *ix = [UIImage imageNamed:@"Newimage.png"]; 

    [img setImage:ix]; 
    // stop any more clicks 
    aButton.tag = 0; 
    }  


} 

一切都給出了答案構建好,但上運行,我得到一個錯誤,因爲「IMG」在調試窗口的顯示出來「UIButton」不是UIImage(我認爲)。

我完全迷惑了這一點,因爲在IB控制顯示爲類:UIImageView但在代碼中我引用它作爲UIImage?它們可以互換嗎?

如何訪問所述的「標籤」屬性「的UIImageView - 顯示圖像陣列(幫助)描述了單個圖像或動畫」

Bascically按鈕也有一個標籤,所以如果按鈕2是點擊它的標籤是2.所以我想改變標籤= 2的UIImageView的圖像等等。

我目前正在學習C/C,在大多數其他語言中這樣一個簡單的任務是非常繁瑣的。

我不知所措。請幫助。

+0

好以上得到解決。我將UIImageView的標籤重命名爲101,102,103等,並將代碼更改爲:UIImageView * img =(UIImageView *)[self.view viewWithTag:aButton.tag + 100];這一切都奏效了。謝謝約翰。 – Bernard

回答

0

的相關意見進行標籤 - 說101-110再取按鈕標籤,添加100給它,然後調用viewWithTag與數...

+0

約翰感謝你的想法。我會在前面看到。到目前爲止,這是我使用的最佳答案。 – Bernard

0

我建議你,而不是使用的UIImageView的UIButton。將你的圖片設置爲你的按鈕圖片,並給他們標籤,但是這會讓你的用戶點擊圖片而不是分離的按鈕。

+0

凱如果需要,我需要拉伸圖像。用一個按鈕,我不能這樣做。 – Bernard

0

您可以遍歷視圖的子視圖並以這種方式獲取每個UIImageView。但是,請注意,使用大量圖像會很快導致您在移動設備上觸發內存警告,因此請謹慎使用。

+0

不應該是一個問題。正如我的代碼顯示,只有一個圖像。所有UIImage將是相同的圖像,只有當用戶點擊它時纔會翻轉。所以只有2張圖片。因爲我知道UIImage的名字,所以我不認爲迭代會有幫助。我只是不想對此進行硬編碼。 UIImage將永遠是「流行」,數字將來自按鈕標籤。使用這個信息,我希望tonbe能夠引用該對象,類似於.net中的反射。 – Bernard

3

UIImageView標籤-1至-10,然後用替換pop功能:

-(IBAction)pop:(id)sender{ 
    UIButton * aButton =(UIButton *)sender; 
    NSLog(@"clicked button with TAG %d",aButton.tag); 

    if (aButton.tag > 0) { 
    UIImageView *img = (UIImageView *)[self.view viewWithTag:(aButton.tag*-1)]; 

    UIImage *ix = [UIImage imageNamed:@"Newimage.png"]; 

    [img setImage:ix]; 
    // stop any more clicks 

    }  
}