Ich möchte die Farbe des Platzhaltertextes ändern, den ich in meinen UITextField
Steuerelementen festgelegt habe, um ihn schwarz zu machen.
Ich würde dies lieber tun, ohne normalen Text als Platzhalter zu verwenden und alle Methoden überschreiben zu müssen, um das Verhalten eines Platzhalters nachzuahmen.
Ich glaube, wenn ich diese Methode überschreibe:
- (void)drawPlaceholderInRect:(CGRect)rect
dann sollte ich dazu in der Lage sein. Ich bin mir jedoch nicht sicher, wie ich mit dieser Methode auf das eigentliche Platzhalterobjekt zugreifen soll.
ios
uitextfield
Adam
quelle
quelle
attributedPlaceholder
sagt, dass Textattribute mit Ausnahme der Farbe verwendet werden.[[NSAttributedString alloc] initWithString:@"placeholder" attributes: @{NSForegroundColorAttributeName: color, NSFontAttributeName : font}];
[<UITextField 0x11561d90> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _field.
Einfach und schmerzfrei, könnte für einige eine einfache Alternative sein.
Apple wird für die Produktion nicht empfohlen und kann Ihre Einreichung ablehnen.
quelle
_placeholderLabel
ist ein Privateigentum. Diese Lösung kann für die Verwendung der privaten API abgelehnt werden.Sie können
drawPlaceholderInRect:(CGRect)rect
als solche überschreiben , um den Platzhaltertext manuell zu rendern:quelle
[self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];
ist wahrscheinlich besser. Auf diese Weise respektieren Sie dietextAlignment
Eigenschaft. Ich habe dies meiner SSTextField- Klasse hinzugefügt . Fühlen Sie sich frei, in Ihren Projekten zu verwenden.Mit dem folgenden Code können Sie die Textfarbe des Platzhalters in eine beliebige Farbe ändern.
quelle
Vielleicht möchten Sie es auf diese Weise versuchen, aber Apple warnt Sie möglicherweise vor dem Zugriff auf Private Ivar:
HINWEIS
Dies funktioniert nicht auf iOS 7 mehr, nach Martin Alléus.
quelle
Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug
kaputt : 😈Dies funktioniert in Swift <3.0:
Getestet in iOS 8.2 und iOS 8.3 Beta 4.
Swift 3:
Swift 4:
Swift 4.2:
quelle
In Swift:
In Swift 4.0:
quelle
Swift 3.0 + Storyboard
Um die Platzhalterfarbe im Storyboard zu ändern, erstellen Sie eine Erweiterung mit dem nächsten Code. (Sie können diesen Code jederzeit aktualisieren, wenn Sie der Meinung sind, dass er klarer und sicherer sein kann.)
Swift 4 Version
Swift 5 Version
quelle
NSAttributedStringKey
.Folgendes nur mit iOS6 + (wie im Kommentar von Alexander W angegeben):
quelle
Ich hatte mich bereits diesem Problem gestellt. In meinem Fall ist der folgende Code korrekt.
Ziel c
Für Swift 4.X.
Für iOS 13 Swift Code
Sie können den folgenden Code auch für iOS 13 verwenden
Hoffe, das kann dir helfen.
quelle
viewWillAppear
oder vornehmen mussteviewDidAppear
.viewDidLoad
ist zu früh.Damit können wir die Farbe des Platzhaltertextes des Textfelds in iOS ändern
quelle
Warum verwenden Sie nicht einfach die
UIAppearance
Methode:quelle
Auch in Ihrem Storyboard, ohne einzelne Codezeile
quelle
in schnellem 3.X.
in schnell 5
quelle
Für iOS 6.0 +
Ich hoffe es hilft.
Hinweis: Apple kann Ihre App ablehnen (0,01% Wahrscheinlichkeit), wenn wir auf die private API zugreifen. Ich verwende dies seit zwei Jahren in allen meinen Projekten, aber Apple hat nicht danach gefragt.
quelle
terminating with uncaught exception of type NSException
für iOS8Für Xamarin.iOS-Entwickler habe ich es in diesem Dokument gefunden: https://developer.xamarin.com/api/type/Foundation.NSAttributedString/
quelle
new NSAttributedString("placeholderstring", new CTStringAttributes() { ForegroundColor = UIColor.Blue.CGColor });
Schnelle Version. Wahrscheinlich würde es jemandem helfen.
quelle
Kategorien FTW. Könnte optimiert werden, um eine effektive Farbänderung zu überprüfen.
quelle
Für die vertikale und horizontale Ausrichtung sowie die Farbe des Platzhalters in iOS7. drawInRect und drawAtPoint verwenden nicht mehr den aktuellen Kontext fillColor.
https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html
Obj-C
quelle
iOS 6 und höher bietet
attributedPlaceholder
weiterUITextField
. iOS 3.2 und höher bietetsetAttributes:range:
weiterNSMutableAttributedString
.Sie können Folgendes tun:
quelle
Diese Lösung für Swift 4.1
quelle
Überschreiben
drawPlaceholderInRect:
wäre der richtige Weg, funktioniert jedoch aufgrund eines Fehlers in der API (oder der Dokumentation) nicht.Die Methode wird nie auf einem aufgerufen
UITextField
.Siehe auch drawTextInRect auf UITextField nicht aufgerufen
Sie könnten die Lösung von digdog verwenden. Da ich nicht sicher bin, ob dies nach der Überprüfung durch Apples nicht möglich ist, habe ich eine andere Lösung gewählt: Überlagern Sie das Textfeld mit meiner eigenen Beschriftung, die das Platzhalterverhalten imitiert.
Das ist allerdings etwas chaotisch. Der Code sieht folgendermaßen aus (Hinweis: Ich mache dies in einer Unterklasse von TextField):
quelle
Ich bin neu in xcode und habe einen Weg gefunden, um den gleichen Effekt zu erzielen.
Ich habe ein Uilabel anstelle des Platzhalters mit dem gewünschten Format platziert und darin versteckt
Ich bin damit einverstanden, dass es eine Problemumgehung ist und keine echte Lösung, aber der Effekt war der gleiche, den ich über diesen Link erhalten habe
HINWEIS: Funktioniert immer noch unter iOS 7: |
quelle
Swift 5 MIT CAVEAT.
Die Einschränkung besteht darin, dass Sie ein nicht leeres
String
Feld eingeben müssen, in dem sich "DON'T_DELETE" befindet, auch wenn diese Zeichenfolge an anderer Stelle im Code festgelegt ist. Könnte Ihnen fünf Minuten Head-Sctratching ersparen.quelle
Das Beste, was ich für iOS7 und weniger tun kann, ist:
quelle
Für diejenigen, die Monotouch (Xamarin.iOS) verwenden, ist hier Adams Antwort, übersetzt in C #:
quelle
Font
Eigenschaft des Textfelds festgelegte Schriftart zu verwenden .Ich musste die Platzhalterausrichtung beibehalten, damit mir Adams Antwort nicht ausreichte.
Um dies zu lösen, habe ich eine kleine Variante verwendet, von der ich hoffe, dass sie auch einigen von Ihnen hilft:
quelle
UILineBreakModeTailTruncation
ist ab iOS 6 veraltet.quelle
Zum Festlegen des Platzhalters für zugeschriebenes Textfeld mit mehreren Farben:
Geben Sie einfach den Text an.
Ausgabe :-
quelle
Eine weitere Option, für die keine Unterklasse erforderlich ist: Lassen Sie den Platzhalter leer und setzen Sie eine Beschriftung auf die Schaltfläche zum Bearbeiten. Verwalten Sie das Etikett so, wie Sie den Platzhalter verwalten würden (Löschen, sobald der Benutzer etwas eingibt.)
quelle