2011-08-20 43 views
2

我遇到了我的UIButtons之一的行爲問題。我試圖讓它成爲切換按鈕,但我遇到了下面的問題。iPhone SDK - UIButton高亮狀態問題

我的代碼:

UIButton *likeButton = [[UIButton alloc] initWithFrame:CGRectMake(horizontalOffset+buttonWidth, verticalOffset, buttonWidth, buttonHeight)]; 
    [likeButton setImage:[UIImage imageNamed:@"like-off.png"] forState:UIControlStateNormal]; 
    [likeButton setImage:[UIImage imageNamed:@"like-on.png"] forState:UIControlStateHighlighted]; 
    [likeButton setImage:[UIImage imageNamed:@"like-on.png"] forState:UIControlStateSelected]; 
    [likeButton addTarget:self action:@selector(likeButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

其觸發的方法:

-(void)likeButtonPressed:(id)sender { 
    UIButton *button = (UIButton *)sender; 
    [button setSelected:!button.selected]; 
} 

我看到的行爲是,當我點擊該按鈕,(和高亮顯示),它的工作原理並且'like-on.png'圖像用於突出顯示的狀態,並且它仍保留在'選定的'狀態中。

但是,當我再次點擊該按鈕時,將其切換爲關閉狀態時,按下我的手指時會看到一個灰色突出顯示的狀態。當我鬆開手指時,我看到'喜歡'圖像按預期顯示。

我想避免看到灰色突出顯示的狀態,當我按下按鈕時,我將其切換關閉。相反,我想,以確保在撥動斷高亮顯示狀態使用「像-on.png」形象代碼中指定。

這是怎麼回事?我的代碼可能不正確的任何想法?

非常感謝, 佈雷特

回答

8

您缺少圖像選擇高亮狀態:

[likeButton setImage:[UIImage imageNamed:@"like-on.png"] forState:UIControlStateSelected | UIControlStateHighlighted]; 

如果不設置它,正常狀態下的圖像用過的。從-[UIButton setImage:forState:]文檔:

在一般情況下,如果沒有一個國家指定的屬性,則默認是使用UIControlStateNormal值。

如果你不希望他們被突出顯示時要修改你的圖片做,設置:

likeButton.adjustsImageWhenHighlighted = NO; 
+2

就是這樣!而我剛剛學到了一些東西;-)我不知道如何指定多個狀態。非常感謝!!! – Brett

+0

兩者中的哪一個確實解決了你的問題? – DarkDust

+0

突出顯示狀態和選定狀態之間有什麼區別?每一個發生在什麼時候? – zakdances

0

我認爲UIButtonselected屬性意味着不同的東西(認爲桌面UI的) 。

這將是更加一致根據BOOL跟蹤,如果它是「開」或「關」來改變所有狀態。

因此,

-(void)likeButtonPressed:(id)sender { 
    UIButton *button = (UIButton *) sender; 
    liking = !liking; 
    if (liking) { 
     // configure the four states with "like-on" and other images 
    } 
    else { 
     // configure the four states with "like-off" 
    } 
} 

否則你會使用一個UI元素的狀態來表示你的程序邏輯,這基本上是有缺陷的。唯一可以接受的(但不是真正的)是UISwitch

+0

'selected'屬性的意思正是海報想要實現的東西:一個可以切換的按鈕 – DarkDust

+0

@DarkDust:好的,但我認爲你會使用'UISwitch'。 – Mundi

+0

通常你會使用UISwitch,但是想想實現「播放/暫停」:你會使用標籤+開關還是一個帶有圖標的按鈕? – DarkDust