Übergeordnetes Recht drawPlaceholderInRect:
wäre der richtige Weg, aber aufgrund eines Fehlers in der API (oder der Dokumentation) funktioniert er nicht.
Die Methode wird nie bei einer UITextField
.
Siehe auch drawTextInRect auf UITextField nicht aufgerufen
Sie könnten die Lösung von digdog verwenden. Da ich nicht sicher bin, ob das Apples Überprüfung übersteht, habe ich eine andere Lösung gewählt: Ich überlagere das Textfeld mit einer eigenen Beschriftung, die das Verhalten des Platzhalters nachahmt.
Das ist allerdings ein bisschen chaotisch. Der Code sieht wie folgt aus (Hinweis: Ich tue dies innerhalb einer Unterklasse von TextField):
@implementation PlaceholderChangingTextField
- (void) changePlaceholderColor:(UIColor*)color
{
// Need to place the overlay placeholder exactly above the original placeholder
UILabel *overlayPlaceholderLabel = [[[UILabel alloc] initWithFrame:CGRectMake(self.frame.origin.x + 8, self.frame.origin.y + 4, self.frame.size.width - 16, self.frame.size.height - 8)] autorelease];
overlayPlaceholderLabel.backgroundColor = [UIColor whiteColor];
overlayPlaceholderLabel.opaque = YES;
overlayPlaceholderLabel.text = self.placeholder;
overlayPlaceholderLabel.textColor = color;
overlayPlaceholderLabel.font = self.font;
// Need to add it to the superview, as otherwise we cannot overlay the buildin text label.
[self.superview addSubview:overlayPlaceholderLabel];
self.placeholder = nil;
}