2016-01-07 48 views
0

我正在使用Mac OS X El Capitan 10.11.2,Xcode 7.1.1和iOS 7作爲iOS應用程序的部署目標。iOS:禁用UIButton的標題顏色

當前,我想要設置一個UIButton的樣式,以便它的文本和背景(顏色/圖像)灰顯/禁用時降低了Alpha。我開始使用.xib編輯器中的控件進行遊戲,並開始更改文本顏色,背景顏色和按鈕圖像。另外,在每次更改上述參數之後,我也改變了啓用狀態。結果令人驚訝。如果按鈕的標題顏色設置爲默認值 - 藍色,則在Xcode中禁用.xib編輯器中的按鈕會導致按鈕標題變灰,這非常棒 - 無需手動將標題設置爲禁用狀態。當按鈕的標題顏色設置爲與默認值不同的值(綠色讓我們假設)時,會出現令人尷尬的行爲 - 無灰度,降低alpha分量或任何其他視覺禁用效果。

結果 - 如果按鈕的標題顏色與默認標題顏色不同,應該手動應用可視化禁用。這是非常糟糕的部分行爲。使用UILabel時沒有觀察到這種情況。無論文字顏色,禁用標籤時禁用灰色顯示的外觀。 UIButton在給定圖像時的行爲與預期相同 - 當按鈕被禁用時,圖像的alpha值設置爲較低的值。如果UIButton和UILabel被禁用,則不會更改背景顏色。

我想要的是使用iOS自動禁用的用戶界面外觀,以便在所有UI元素禁用時都具有視覺一致性。我不想使用:

UIButton setTitleColor: (UIColor*) color forState: (UIControlState) state;

因爲不想手動指定爲禁用狀態的顏色,而是使用自動的iOS顏色,圖像等交替處於禁用狀態。

此外,在某些迴歸之上是指定的錯誤行爲,還是?

回答

4

你不行。一旦在UIControlStateNormal狀態下致電setTitleColor:forState:,該顏色將應用於沒有自己特定顏色的所有狀態。

UIButton setTitleColor:forState:的文檔說明了這一點:

在一般情況下,如果沒有一個國家指定的屬性,則默認是使用UIControlStateNormal值。如果未設置UIControlStateNormal值,則該屬性默認爲系統值。因此,至少應該設置正常狀態的值。

因此,一旦爲正常狀態設置了顏色,就需要爲所有其他狀態(如「已禁用」狀態)設置所需的顏色。

+0

好的,這適用於UIButton。那麼UILabel呢?它不支持文字顏色的說明。只有普通('textColor')和高亮('highlightTextColor')文字顏色作爲獨立的屬性提供。爲什麼在使用與默認不同的顏色時,標籤的自動生成的禁用UI未被破壞? – Ivan

+0

按鈕是一個控件('UIControl'),標籤不是。他們的API完全不同。 – rmaddy

+0

好的,有沒有推薦的iOS應用程序風格化方式 - 比方說使用CSS,或者應該手動風格化每個控件或子類,他/她需要的每種類型的控件,以便自動化它的風格化? – Ivan