2012-01-11 140 views
5

我需要UIButton來保持按下狀態。基本上,如果一個按鈕處於正常狀態,我想觸摸按鈕,突出顯示其標準的藍色,然後擡起我的手指後保持藍色。 我做了以下UIAction並將按鈕Touch Up Inside事件連接到它。TouchUpInside事件後無法將UIButton保持在選定狀態

-(IBAction) emergencyButtonPress:(id) sender 
{ 
    if(emergencyButton.highlighted) 
    { 
     emergencyButton.selected = NO; 
     emergencyButton.highlighted = NO; 
    } 
    else 
    { 
     emergencyButton.selected = YES; 
     emergencyButton.highlighted = YES; 
    } 
} 

但會發生什麼,當我刪除了我的手指,該按鈕可以追溯到一個白色背景。爲了測試我添加了一個UISwitch並讓它執行相同的代碼:

-(IBAction) emergencySwitchClick:(id) sender 
{ 
    if(emergencyButton.highlighted) 
    { 
     emergencyButton.selected = NO; 
     emergencyButton.highlighted = NO; 
    } 
    else 
    { 
     emergencyButton.selected = YES; 
     emergencyButton.highlighted = YES; 
    } 
} 

在這種情況下,按鈕切換到高亮和非高亮狀態,因爲我期望的那樣。

Touch Up Inside事件發生後是否發生了另一個事件,它將狀態重置爲「正常」?我如何保持突出顯示的狀態?

回答

1

如果你想讓上面的代碼起作用,你應該爲所選狀態設置一個圖像,並且爲狀態高亮顯示一個(甚至相同)。

[emergencyButton setBackgroundImage:buttonHighlightImage forState:UIControlStateHighlighted]; 
[emergencyButton setBackgroundImage:buttonHighlightImage forState:UIControlStateSelected]; 

希望它有幫助。

+0

感謝您的回覆。我將這些行添加到了我的viewdidload:函數中。現在,當我按住按鈕時,我看到圖像,但是當我讓按鈕轉到白色時,它會回到白色 – WolfpackEE 2012-01-11 15:13:22

2

如果你想要的東西像一個切換按鈕,自定義您的「選擇」狀態下的「按下」狀態,然後寫是這樣的:只要

- (IBAction)buttonTapped:(id)sender { 
    [(UIButton*)sender setSelected:![sender isSelected]]; 
} 
0

這是不可能的不幸,你放手蘋果再次改變狀態。 我之前使用過的一個選項(但並不漂亮)是,在按下按鈕將其重新置於選定狀態後,使用延遲爲0.1的performSelector。這在我的情況下工作。

編輯:如果你不希望看到的閃爍效果,只需設置延時爲0.0

+0

哇,這確實有效。有一個從藍色到白色到藍色的快速按鈕。我必須看看最終用戶是否可以接受。謝謝你的提示。 – WolfpackEE 2012-01-11 16:24:57

+0

沒問題,如果它適合你,你能把這個標記爲正確答案嗎?如果所有文章的答案都標爲:) – 2012-01-12 09:31:03

6

高亮顯示的狀態施加並移除通過iOS的,當你觸摸/鬆開按鈕。所以不要依靠你的行動方法。

至於其他的答案中的一個說,設置高亮顯示的圖像是一樣的選擇圖像,然後修改你的操作方法:

-(IBAction) emergencyButtonPress:(id) sender 
{ 
    emergencyButton.selected = !emergencyButton.selected;  
} 
1

我有同樣的問題,這是什麼工作對我來說:

-(IBAction)buttonPressed:(id)sender { 
if (isSelected) { 
    [_button setSelected:NO]; 
    [_button setImage:[UIImage imageNamed:@"not_selected.png"] forState:UIControlStateSelected]; 
    isSelected=NO; 

} 
else { 
    [_button setSelected:YES]; 
    [_button setImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateSelected]; 
    isSelected=YES; 
} 
} 
0

這爲我工作:

- (void)tapButton:(id)sender{ 
    UIButton *button = sender; 
    if (!button.selected){ 
     [self performSelector:@selector(highlight:) withObject:button afterDelay:0.0]; 
    }else{ 
     [self performSelector:@selector(removeHighlight:) withObject:button afterDelay:0.0]; 
    } 
} 

- (void)highlight:(UIButton *)button{ 
    button.selected = !button.selected; 
    button.highlighted = YES; 
} 

- (void)removeHighlight:(UIButton *)button{ 
    button.selected = !button.selected; 
    button.highlighted = NO; 
} 
0

試試這個簡單的答案....

- (void)mybutton:(id)sender 
{ 
    UIButton *button = (UIButton *)sender; 
    button.selected = ![button isSelected]; // Important line 
    if (button.selected) 
    { 
     NSLog(@"Selected"); 
     NSLog(@"%i",button.tag); 
    } 
    else 
    { 
     NSLog(@"Un Selected"); 
     NSLog(@"%i",button.tag); 

    } 
} 
+0

你能解釋一下'button.selected =![button isSelected];'爲什麼它很重要,它在做什麼? – jckly 2014-04-24 21:16:15

相關問題