2013-07-24 91 views
3

我試圖設置UIButtontitleColor在選擇某個特定顏色時突出顯示,但是,我需要設置按鈕以供用戶觸摸時選擇在UIButtonUIButton標題顏色在選擇和突出顯示

我已經設定,就像這樣:

[button setTitleColor:normalColor forState:UIControlStateNormal]; 
[button setTitleColor:superDuperSpecialColor forState:UIControlStateHighlighted]; 
[button setTitleColor:superDuperSpecialColor forState:UIControlStateSelected]; 
[button addTarget:self 
      action:@selector(action:) 
forControlEvents:UIControlEventTouchDown]; 

但是,當按鈕使用[senderButton setSelected:YES]action:方法被選中,它設置titleColornormalColor,而不是superDuperSpecialColor,這是應該的,因爲它被突出顯示和選擇。

註釋掉setSelected:調用可以防止按鈕變爲並保持選中狀態,並且註釋掉突出顯示的狀態顏色看起來沒有任何影響。

我是否要爲了重頭戲之後調用setSelected:添加目標UIControlEventTouchCancelUIControlEventTouchUpInsideUIControlEventTouchUpOutside結束 - 或 - 改變titleColorUIControlStateNormalsuperDuperSpecialColor當按鈕獲取觸摸?

在一個側面說明,我也喜歡設置titleColor像這樣:

[button setTitleColor:superDuperSpecialColor 
      forState:(UIControlStateHighlighted | UIControlStateSelected)]; 

但是,這似乎並沒有工作。這是爲什麼? Objective-C是否檢查狀態等同性?

+0

如果它開始了正常的顏色和設置選擇讓它也正常,你確定有什麼顏色的事情發生? –

+0

@MarcusAdams將它設置爲選中將其設置爲'superDuperSpecialColor',但只有在該按鈕未被高亮顯示後才顯示該顏色,因爲在按下時該按鈕變爲「被選中」,這與按鈕高亮顯示時相同。 – RileyE

回答

4

我驗證了您的結果,它好像是iOS中的錯誤。它在模擬器和設備(iOS 6.1)上均失敗。看起來好像如果所選擇的和突出顯示的狀態都是YES,那麼選擇的設置應該覆蓋突出顯示的設置。這主要是以這種方式實施的。按鈕的文本值是這樣工作的,但顏色似乎錯了(默認爲正常)。

如果您有最新的XCode,看看他們是否修復了這個問題,那麼您可能需要在iOS 7上試用它,否則將其作爲錯誤報告。

由於selected不是UIButton的常用狀態,因此可能未與其他州合併進行正確測試。

作爲一種解決方法,在您的action方法中,您可以將正常狀態的顏色設置爲superDuperSpecialColor,併爲touch up事件添加另一個操作以將普通顏色恢復正常。由於按鈕被按下時的狀態實際上不會是正常的,所以如果他們將來修復它,它不會破壞任何東西。

+1

這就是我最終實現的,謝謝。我也只是在iOS 7上測試它,它似乎有相同的結果。我想這是iOS的事情,在這種情況下,而不是我的大腦! – RileyE

0

我認爲你需要檢查你的UIButton類型,在創作中。我有這樣的代碼,並正常工作。

但是在一行中設置狀態兩個狀態對我不起作用。

[button setTitleColor:superDuperSpecialColor 
      forState:(UIControlStateHighlighted | UIControlStateSelected)]; 
+0

我正在使用'[[UIButton alloc] initWithFrame:]',所以沒有任何類型。 – RileyE

+0

另外,你確定你正在使用'UIControlEventTouchDown',然後在被調用的方法內設置'UIButton'的'selected'屬性爲'YES'嗎? – RileyE

+0

我的代碼,即時通訊框架初始化按鈕,用故事板中創建的按鈕測試,所有的作品。 [button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; [button setTitleColor:[UIColor greenColor] forState:UIControlStateSelected]; [button addTarget:self action:@selector(action :) forControlEvents:UIControlEventTouchDown]; // [按鈕setSelected:YES]; (void)action:(id)sender NSLog(@「sender」);(id)發件人{ - [button setSelected:YES]; } – Elto

1

對於選定狀態和突出顯示狀態,還必須設置標題,而僅突出顯示狀態標題取自正常狀態。所以,不要忘了添加額外的行:下面

[button setTitleColor:UIColor.blackColor forState:UIControlStateSelected]; 
[button setTitleColor:[UIColor.blackColor colorWithAlphaComponent:0.5f] 
       forState:UIControlStateSelected | UIControlStateHighlighted]; 

[button setTitle:@"Title" forState:UIControlStateSelected]; 
[button setTitle:@"Title" forState:UIControlStateSelected | UIControlStateHighlighted]; 

Сode工作沒有突出顯示的狀態明確設置標題罰款:

[button setTitleColor:UIColor.greyColor forState:UIControlStateNormal]; 
[button setTitleColor:[UIColor.greyColor colorWithAlphaComponent:0.5f] 
      forState:UIControlStateHighlighted]; 

[button setTitle:@"Title" forState:UIControlStateNormal]; 
相關問題