2013-10-06 43 views
3

我需要保持UIButton在觸摸事件之後高亮顯示。在IOS版本< 7我用觸摸的內心活動了以下行動:保持UIButton在觸摸和iOS之後高亮7

- (IBAction)clickMe:(id)sender { 
    UIButton *button = sender; 
    [NSOperationQueue.mainQueue addOperationWithBlock:^{ button.highlighted = YES; }]; 
} 

不幸的是東西的iOS 7已發生變化,這個代碼不工作了:如果我輕點按鈕,該按鈕返回到正常狀態;有趣的是,如果我按住按鈕一會兒,按鈕仍然會突出顯示。請注意,該應用程序是爲iOS 6開發的,因此它在兼容模式下運行在iOS 7中。我試圖找出一種方法來使應用程序在iOS 6上正常工作,但到目前爲止,我還沒有找到一個很好的解決方案(一種解決方法是排隊一個事件,在短暫延遲後突出顯示按鈕,但是產生一個煩人的按鈕閃爍)。有什麼建議?

回答

4

As for the ".highlighted" property you're using, Apple documentation states:「UIControl自動設置並清除此狀態,當觸摸進入和退出期間跟蹤和觸摸了。」

爲什麼不改變你的UIButton顯示的UIImage,取決於你希望它出現的「狀態」?我將繼承UIButton,給它一個可以控制或設置的狀態屬性,並根據該狀態顯示不同的圖像。

+0

state屬性爲只讀。 – Wolfy

+0

你是對的@Wolfy。讓我想想一個稍微重寫的答案。 –

+1

邁克爾,是的,我知道'.highlighted'屬性是如何工作的,但是謝謝你指出。像我一樣排隊一個操作來覆蓋默認行爲,因爲在Touch Up事件之後,操作會發生,將'.highlighted'重置爲NO。這是一個竅門,但它簡單而有效。不幸的是,iOS 7顯然改變了操作的順序。當然,UIButton類的子類將解決這個問題,但我正在尋找一個簡單的解決方案。另外,我沒有使用圖片,只是標題文字。 – Wolfy

0

這可能有點晚,以幫助你,但我最終做了解決這個問題的最後做法是將圖層背景顏色設置爲灰色在突出顯示的按鈕設置塊。然後當我將突出顯示狀態設置爲false時,我將背景顏色設置爲白色。爲了這個工作,你必須使用自定義按鈕,而不是一個四捨五入的按鈕。

1

試試這個:

[UIView animateWithDuration:1 
        animations:^{ 
        } 
        completion:^(BOOL finished) { 
         button.highlighted = true; 
         button.selected = true; 
        } 
];