2012-08-06 76 views
3

我已經子類UIButton,並試圖設置標題的顏色,當按鈕被突出顯示。自定義按鈕也位於筆尖文件中。如何設置子類UIButton的高亮標題顏色?

我的代碼:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.titleLabel.textColor = [UIColor blueColor]; 
    [self setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; // Offending line 

} 

然而,視圖不加載(貌似進入無限循環而沒有示出)時,我有setTitleColor:forState:線。它應該在其他地方宣佈嗎?你還怎麼設置自定義UIButton的高亮標題顏色?

+0

線「,你究竟是什麼意思?它報告編譯時間消息嗎?或者當你嘗試執行它時出錯?如果後者,你認爲你有一個UIButton(或它的子類),但也許該對象實際上是別的東西? – 2012-08-06 02:37:16

+0

違規行是什麼使視圖崩潰。它進入看起來像一個無限循環,並不加載。我會用這個更新我的問題。 – zlog 2012-08-06 11:46:20

回答

6

如果你想這樣做在layoutSubviews,這將避免無限循環您正在創建:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    if (self.state == UIControlStateHighlighted) { 
     self.titleLabel.textColor = [UIColor redColor]; 
    } else { 
     self.titleLabel.textColor = [UIColor blueColor]; 
    } 
} 
+0

完美的作品。謝謝! – zlog 2012-08-07 01:03:49

+0

這種方法的問題在於,在視圖控制器的生命週期中多次調用這個方法,所以效率並不高。 – 2015-06-03 18:54:24

3

你在做別的用的UIButton子類?如果你想要做的是改變文字顏色,您可以使用標準的UIButton功能:

[button setTitleColor:[UIColor redColor] forControlState:UIControlStateHighlighted]; 
[button setTitleColor:[UIColor whiteColor] forControlState:UIControlStateNormal]; 

設置按鈕時執行此操作,它並不需要發生每次layoutSubviews由「// Offnding稱爲

+0

自定義按鈕類的原因是因爲它有點破解。我需要一個自定義字體f或我的按鈕,當我在我的筆尖選中它時,xcode保持崩潰狀態,所以我以編程方式更改了字體。這是另一個問題 – zlog 2012-08-06 12:38:12