2012-03-28 60 views
1

我已經嘗試了兩種選擇回答大家在這個論壇,但沒有對我的作品。我曾嘗試重寫:如何更改UITextField的佔位符顏色?

- (void)drawPlaceholderInRect:(CGRect)rect

也:

[self.myTextField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];

,但沒有發生......仍是同樣的灰色......也許我必須繼承一些東西,我不知道......任何建議?

回答

4

做到這一點最簡單的方法:

UILabel *placeholderAppearance; 
if (@available(iOS 9, *)) { 
    placeholderAppearance = [UILabel appearanceWhenContainedInInstancesOfClasses:@[[UITextField class]]]; 
} else { 
    placeholderAppearance = [UILabel appearanceWhenContainedIn:[UITextField class], nil]; 
} 
placeholderAppearance.textColor = [UIColor redColor]; 

將帖子 使用此之後,我認識了另一個錯誤,上面做的工作,但它也重置所有其他的顏色在我的視圖中標記爲默認黑色。然後爲了克服這個問題,我不得不將子類UILabel類用於我的視圖中的所有其他標籤中。

+0

謝謝!還有一件事:是否可以更改編輯藍色垂直條的顏色? – sergiocg90 2013-04-13 09:12:30

+0

不知道這個,但我想添加一些東西到上面的佔位符工作。使用後我知道了另一個bug,上面做了這個工作,但它也將我視圖中所有其他標籤的顏色重置爲Default Black。然後爲了克服這個問題,我不得不將子類UILabel類用於我的視圖中的所有其他標籤中。 – 2013-04-13 20:39:33

1

請參閱drawPlaceholderInRect:UITextField。您需要繼承UITextField並重寫此方法以配置具有所需文本顏色和調用超級實現的圖形上下文。

通過這種方法被調用的時候,當前圖形上下文 已經配置了默認環境和文本顏色 圖。在您重寫的方法中,您可以進一步配置當前的 上下文,然後調用super來執行實際繪圖或自己執行繪圖。如果你自己渲染文本,你應該不會調用超級。

+0

謝謝你,現在我知道它是如何真正的作品 – sergiocg90 2012-03-28 19:54:23

0

從iOS6的,你可以使用歸因佔位符:

textfield.attributedPlaceholder = [[NSAttributedString alloc] initWithString:textfield.placeholder attributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];