2013-01-08 53 views
0

我試圖在觸摸按鈕時更改UIButton圖像。目前,它只是在突出顯示的狀態變化上發生變化。我希望它改變並留在那裏。我嘗試了UIControlStateSelected來改變狀態,但沒有運氣。如何在觸摸按鈕時更改UIButton圖像

感謝您的幫助

這裏是我的代碼:

// Create buttons for the sliding category menu. 
    NSMutableArray* buttonArray = [NSMutableArray array]; 
    NSArray * myImages = [NSArray arrayWithObjects:@"category-cafe-unsel.png", @"category-food-unsel.png", @"category-clothing-unsel.png", @"category-health-unsel.png", @"category-tech-unsel_phone.png" , @"category-tech2-unsel.png", @"catefory-theatre-unsel.png", @"category-travel-unsel.png", nil]; 

    NSArray * myImagesSel = [NSArray arrayWithObjects:@"category-cafe-sel.png", @"category-food-sel.png", @"category-clothing-sel.png", @"category-health-sel.png", @"category-tech-sel_phone.png" , @"category-tech2-sel.png", @"catefory-theatre-sel.png", @"category-travel-sel.png", nil]; 

    // only create the amount of buttons based on the image array count 
    for(int i = 0;i < [myImages count]; i++) 
    { 
     // Custom UIButton 

     btn = [UIButton buttonWithType:UIButtonTypeCustom]; 

     [btn setFrame:CGRectMake(0.0f, 20.0f, 52.0f, 52.0f)]; 
     [btn setTitle:[NSString stringWithFormat:@"Button %d", i] forState:UIControlStateNormal]; 
     [btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateNormal]; 
     [btn setImage:[UIImage imageNamed:[myImagesSel objectAtIndex:i]] forState:UIControlStateHighlighted]; 

     NSLog(@"The button title is %@ ", btn.titleLabel.text); 

     [btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
     [buttonArray addObject:btn]; 

回答

2

在你IBAction爲方法添加下面幾行:

- (IBAction)change:(id)sender 
{ 
    UIButton *button = (UIButton *)sender; 
    int tagOfButton = button.tag - 1; 
    [button setImage:[UIImage imageNamed:[myImagesSel objectAtIndex:tagOfButton]] forState:UIControlStateNormal]; 
} 

一行添加到您的像循環:

for(int i = 0;i < [myImages count]; i++) 
{ 
    // other stuffs 
    btn.tag = i+1; 
} 

編輯:

如果需要撤銷之前的選擇是單擊時按鈕等:你IBAction爲方法內部

寫這個循環。

for(int i = 0;i < [myImages count]; i++) 
{ 
    UIButton *but = (UIButton *)[buttonArray objectAtIndex:i]; 
    if(but != button) 
    { 
     [btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateNormal]; 
    } 
} 

或者只是將上一個按鈕標記存儲到變量。 並用它來改變撤消圖像的變化。

+0

工作嗎? –

+0

謝謝。它會切換圖像 - 所以會顯示錯誤的圖像。它們似乎是一次性的,而不是圖像數組中的第一項顯示第二個顯示。另外,當另一個按鈕被觸摸時,狀態也不會被撤消。感謝您的幫助:) – hanumanDev

+0

我將代碼更改爲int tagOfButton = button.tag - 2;現在正在顯示正確的圖像。當他人觸摸另一個按鈕時,我只是將它們恢復爲默認值。 :) – hanumanDev

0
[btn setTitle:@"I'm not selected" forState:UIControlStateNormal]; 
[btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateNormal]; 
[btn setTitle:@"I'm selected" forState:UIControlStateSelected]; 
[btn setImage:[UIImage imageNamed:[myImagesSel objectAtIndex:i]] forState:UIControlStateSelected]; 

[btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

-(IBAction)buttonPressed:(id)sender { 
    btn.selected = !btn.selected; 
} 
+0

謝謝,但那不幸的是沒有做任何事情。 – hanumanDev

+0

我剛剛編輯我的帖子,也許你錯了。但它有效... – xapslock