webentwicklung-frage-antwort-db.com.de

Ändern Sie die Platzhaltertextfarbe von UITextField programmgesteuert

Ich habe einen UITextFieldmit einem Platzhalter. Wenn der Benutzer das Formular absenden möchte und nichts im Textfeld eingegeben hat, möchte ich, dass die Textfarbe des Platzhalters rot wird. Hier sind meine Fragen:

  • Würde dies gegen die Richtlinien der Benutzeroberfläche von Apple verstoßen? Ich möchte nicht, dass meine App wegen so kleiner Details abgelehnt wird.
  • Wie würde ich das machen?

Ich weiß, dass ich die Methode drawPlaceholderInRect: in einer Unterklasse von UITextFieldüberschreiben kann. Wenn ich dies jedoch tun würde, wäre der Text immer rot und ich möchte, dass er, wie ich bereits schrieb, abhängig von einer benutzerdefinierten Aktion rot wird.

Die einzige Lösung, die mir einfällt, ist die Verwendung eines "Standard" -Textes für UITextField(den Text des Platzhalters). Stellen Sie ihn hellgrau dar, solange der Benutzer nichts eingegeben hat, und zeigt ihn rot an, wenn ich ihn brauche. Mit anderen Worten, ich würde nur das Verhalten des Platzhalters verspotten. Das ist natürlich nicht sehr elegant.

Irgendwelche Ideen?

15
strave

wenn der Benutzer nichts in das Textfeld schreibt. Setzen Sie diesen Text dann als Textfeld.text-Text und ändern Sie die Schriftfarbe.

2
Ron

Schauen Sie sich das an:

Digdog Dig - Ändert die Platzhalterfarbe von UITextField, ohne sie zu subklassifizieren

[self.MyTextField setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
48
verklixt

Sie können die Textfarbe des Platzhalters mithilfe des nachstehenden Codes in eine beliebige Farbe ändern. Versuchen Sie es einfach.

UIColor *color = [UIColor lightTextColor];
YOURTEXTFIELD.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"PlaceHolder Text" attributes:@{NSForegroundColorAttributeName: color}];
24
Atanu Mondal

wie die Antwort von verklixt, aber ohne auf private APIs zuzugreifen und UIAppearance zu verwenden:

[[UILabel appearanceWhenContainedIn:[UITextField class], nil] setTextColor:[UIColor darkGrayColor]];

(getestet von 5.0 bis 7.1)

12
glasz

Sie können den Platzhaltertext als NSAttributedString festlegen, indem Sie diese Eigenschaft verwenden.

NSAttributedString *coloredPlaceholder = [[NSAttributedString alloc] initWithString:@"I     am a placeholder string" attributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
[self.textField setAttributedPlaceholder:coloredPlaceholder];
5
Matt

Wir können über den Schlüsselpfad auf das Platzhalteretikett zugreifen, um die Farbe zu ändern, d. H .:

[self.textField setValue:[UIColor **"your color"**] 
                                  forKeyPath:@"_placeholderLabel.textColor"];
5

überschreiben

-(void) drawPlaceholderInRect:(CGRect)rect {
    [[UIColor darkGrayColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:15.0]];
}
4
harshalb

Ich hatte einige Schwierigkeiten beim Farbwechsel des Platzhalters, stattdessen habe ich eine andere Lösung gefunden, die perfekt für mich funktioniert. 

//On button action change color to red
-(void)btnAction
{
    // authentication for missing textfields
    if ([textField_firstName.text isEqualToString:@""])
    {
        textField_firstName.textColor=[UIColor redColor];
        [email protected]"Enter First Name";
    }
}

// in the delegate method of UITextField change the following 
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    //match the following string with above string and change the string to empty string on textfield click
    if ([textField_firstName.text isEqualToString:@"Enter First Name" ]) 
    {
        [email protected]"";
    }

    //change back to the text color you use
    textField_firstName.textColor=[UIColor blackColor];
}
0
Arshad Parwez