[英]iOS: I set my uibuttons with tags. How do I change the specific button image based on its tag?
我有多個按鈕陣列,稱為按鈕。 每個標記。 如何僅基於按鈕的標簽和標簽來更改按鈕上的圖像。 截至目前,它僅更改最后一個按鈕。
-(void)buttonTapped:(id)sender{
NSLog (@"%i",[sender tag])];
[button setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}
或者:
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];
}
如果您只想更改被點擊的按鈕,則應該可以進行以下操作。
-(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
在這種情況下,您實際上不需要使用標簽。 調用IBAction時,發送者參數是指向觸發IBAction的控件的指針。 (您的按鈕。)
因此,您已經有了指向該按鈕的指針。
因此,正如其他人指出的那樣,您的代碼可能如下所示:
-(void)buttonTapped:(UIButton *)sender
{
[sender setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}
請注意,我將發件人的類型更改為UIButton,因此您不必強制轉換它。 只要將動作僅連接到按鈕,就可以安全地進行操作並使代碼更清晰。
正如另一位發帖人所指出的那樣,擁有一系列稱為“按鈕”的按鈕是不好的。 我在以下代碼中將其重命名為“ buttons”:
如果要使用標簽和按鈕數組來執行此操作,則可以使用如下代碼:
-(void)buttonTapped:(UIButton *)sender
{
NSUInteger tag = [sender tag];
UIButton *aButton = buttons[tag];
[aButton setImage:[UIImage imageNamed:@"button_change.png"] forState:UIControlStateNormal];
}
創建名稱為button_change1.png
, button_change2.png
等的圖像。
和:
-(void) buttonTapped:(UIButton*)sender
{
NSString* imageName = [NSString stringWithFormat: @"button_change%ld.png", (long)sender.tag];
[button setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.